前言

如何实现一张图片在iPhone和iPad上显示不同的尺寸,我了解到一般有三种办法:直接手写代码动态添加约束;把NSLayoutConstraint关联到ViewController里再viewDidLoad里面加判断赋值;用size classes(这个目前还不太会)。这里分享一个直接在Storyboard里面就适配的办法。

声明 
欢迎转载,但请保留文章原始出处:) 
博客园:http://www.cnblogs.com
农民伯伯: http://over140.cnblogs.com

正文

import Foundation

class NSLayoutConstraintEx: NSLayoutConstraint {

    @IBInspectable
    var ipad: CGFloat =  {
        didSet {
            if DeviceUtils.isIPad() {
                constant = ipad
            }
        }
    }     @IBInspectable
    var iphone4: CGFloat =  {
        didSet {
            //640 x 960
            if DeviceUtils.isIphone() && DeviceUtils.getScreenSize().height == 960.0 {
                constant = self.iphone4
            }
        }
    }     @IBInspectable
    var iphone5: CGFloat =  {
        didSet {
            //640 x 1136
            if DeviceUtils.isIphone() && DeviceUtils.getScreenSize().height == 1136.0 {
                constant = self.iphone5
            }
        }
    }     @IBInspectable
    var iphone6: CGFloat =  {
        didSet {
            //750 x 1334
            if DeviceUtils.isIphone() && DeviceUtils.getScreenSize().height == 1334.0 {
                constant = self.iphone6
            }
        }
    }     @IBInspectable
    var iphone6Plus: CGFloat =  {
        didSet {
            //1242 x 2208
            if DeviceUtils.isIphone() && DeviceUtils.getScreenSize().height >= 1920.0 {
                constant = self.iphone6Plus
            }
        }
    }
}

用法:

修改现在的约束,让它使用NSLayoutConstraintEx,效果如下:

注意User Defined Runtime Attributes这一栏,如果去掉某个自定义属性,这边可能会存在残留,删掉残留的那一项即可。还有Module这一栏如果显示None说明使用自定义类失败,一般把Class删除一下重新制定就好了。

默认是iPhone布局,这样在iPad上就能使用大尺寸的图片了

结束

买了本Auto Layout开发秘籍,继续学习和思考屏幕适配方面的内容。

【iOS】屏幕适配之NSLayoutConstraint的更多相关文章

  1. iOS屏幕适配

    ## iOS屏幕适配 ### iOS屏幕适配发展史 1> iPhone4以前(没有iPad) * 不需要屏幕适配 2> iPad.iPhone5等设备出现 * 需要做横竖屏适配 * aut ...

  2. 【转】iOS屏幕适配

    一.iOS屏幕适配发展历程 设备 适配技术 4及以前(iPad未出) 直接用代码计算 有了iPad autoResizing 有不同屏幕的iPhone后 autoLayout 有更多不同屏幕的iPho ...

  3. iOS屏幕适配-iOS笔记

    学习目标 1.[了解]屏幕适配的发展史 2.[了解]autoResizing基本用法 3.[掌握]autoLayout 的基本用法 4.[掌握]autoLayout代码实现 5.[理解]sizeCla ...

  4. Auto Layout 在iOS屏幕适配中的使用

    前几天在做iOS屏幕的适配,也就是让同样的UI控件的布局在不同屏幕的iOS设备上面都正确显示,storyBoard就无可避免的用到了Auto Layout.在这个过程中,我发现要熟练掌握Auto La ...

  5. iOS屏幕适配方案-Auto Layout

    市场上的android手机五花八门.各种尺寸的屏幕让android程序员们比較头疼. 也有一些大神写了一些博客提出了自己的观点.iOS貌似也迎来了大屏6+,因此屏幕适配的问题也是有滴,因此苹果也有自己 ...

  6. iOS 屏幕适配:autoResizing autoLayout和sizeClass

    1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...

  7. IOS - 屏幕适配

    原文:Beginning Auto Layout Tutorial in iOS 7: Part 1 感谢翻译小组成员@answer-huang(博客)热心翻译.如果您有不错的原创或译文,欢迎提交给我 ...

  8. 转:iOS 屏幕适配,autoResizing autoLayout和sizeClass图文详解

    1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...

  9. iOS 屏幕适配,autoResizing autoLayout和sizeClass图文详解

    === 1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS ...

随机推荐

  1. Web APi之HttpClient注意事项以及建议(四)

    前言 之前对于用SelfHost来手动实现Web API的宿主模式,似乎不是太深入,所以本篇文章我们一起来讨论关于利用HttpClient来访问Web API上的资源来进行探讨以及注意相关事项,希望此 ...

  2. ECMAScript5之Object

    在ECMAScript5中对Object新增的些方法,以前没注意的同志们,嘻嘻,下面我们再一起来边看边学. 1.Object之create Create单词意为创造嘛,作为Object的静态方法,不言 ...

  3. IE里面的一些BUG记录

    网上已经有很多类似的记录了,这里写这个是给自己在项目中碰到的问题做个简单的记录,以后将持续更新 1.IE67 border-bottom失效      一个a标签,想要使用移上去后会在下面显示一个横条 ...

  4. 1Z0-053 争议题目解析46

    1Z0-053 争议题目解析46 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 46.What happens when you run the SQL Tuning Adviso ...

  5. (六)WebGIS中地图瓦片在Canvas上的拼接显示原理

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 在之前的五个章节中,我们在第一章节里介绍了WebGIS的基本 ...

  6. 非对称技术栈实现AES加密解密

    非对称技术栈实现AES加密解密 正如前面的一篇文章所述,https协议的SSL层是实现在传输层之上,应用层之下,也就是说在应用层上看到的请求还是明码的,对于某些场景下要求这些http请求参数是非可读的 ...

  7. ajax+php+js实现异步刷新表单验证

    创建ajax对象 //创建对象 function createAjax(){ var request =false; //IE浏览器,window对象存在ActiveXObject属性 if(wind ...

  8. 使用CodeFirst创建并更新数据库

    本文主要介绍如何使用CodeFirst模式来新建并更新数据库 在使用Entity Framwork的三种方式(ModelFist.DBFirst.CodeFirst)中,CodeFirst方式书写的代 ...

  9. Web页面实现后台数据处理进度与剩余时间的显示

    1.页面后台代码添加如下属性: /// <summary> /// 总数 /// </summary> private double total { set { Session ...

  10. bootstrap-简洁实用的jQuery手风琴插件

    前端 <html lang="zh"> <head> <meta charset="UTF-8"> <meta htt ...