【iOS】屏幕适配之NSLayoutConstraint

import Foundation

class NSLayoutConstraintEx: NSLayoutConstraint {

    @IBInspectable
    var ipad: CGFloat = 0 {
        didSet {
            if DeviceUtils.isIPad() {
                constant = ipad
            }
        }
    }

    @IBInspectable
    var iphone4: CGFloat = 0 {
        didSet {
            //640 x 960
            if DeviceUtils.isIphone() && DeviceUtils.getScreenSize().height == 960.0 {
                constant = self.iphone4
            }
        }
    }

    @IBInspectable
    var iphone5: CGFloat = 0 {
        didSet {
            //640 x 1136
            if DeviceUtils.isIphone() && DeviceUtils.getScreenSize().height == 1136.0 {
                constant = self.iphone5
            }
        }
    }

    @IBInspectable
    var iphone6: CGFloat = 0 {
        didSet {
            //750 x 1334
            if DeviceUtils.isIphone() && DeviceUtils.getScreenSize().height == 1334.0 {
                constant = self.iphone6
            }
        }
    }

    @IBInspectable
    var iphone6Plus: CGFloat = 0 {
        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上就能使用大尺寸的图片了

本文转自博客园农民伯伯的博客,原文链接:【iOS】屏幕适配之NSLayoutConstraint,如需转载请自行联系原博主。

时间: 2017-12-04
Tags: 布局, ios, runtime

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

iOS屏幕适配开发实用技巧_IOS

一.旋转处理 第一步:注册通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeFrames:) name:UIDeviceOrientationDidChangeNotification object:nil]; 第二步:处理接收事件 -(void)changeFrames:(NSNotification *)notification{ NSLog(@"change notifica

iOS屏幕适配-iOS笔记

学习目标 1.[了解]屏幕适配的发展史 2.[了解]autoResizing基本用法 3.[掌握]autoLayout 的基本用法 4.[掌握]autoLayout代码实现 5.[理解]sizeClass的基本用法 一.屏幕适配的发展史 随着iOS屏幕尺寸越来越多样化,屏幕适配也就越来越重要了. iphone1 - iphone3gs时代,window的size固定为(320,480).我们只需要简单计算一下相对位置就好了,不需要做屏幕适配. iphone4 - iphone4s时代,苹果推出了

IOS开发之绝对布局和相对布局(屏幕适配)

        之前如果做过Web前端页面的小伙伴们,看到绝对定位和相对定位并不陌生,并且使用起来也挺方便.在IOS的UI设计中也有绝对定位和相对定位,和我们的web前端的绝对定位和相对定位有所不同但又有相似之处.下面会结合两个小demo来学习一下我们IOS开发中UI的绝对定位和相对定位.在前面的博客中所用到的UI事例用的全是绝对定位,用我们Storyboard拖拽出来的控件全是绝对定位的,就是我们可以同改变组件的frame来改变组件的位置和大小.而相对定位则不同,相对定位是参考组件周围的元素来

iOS 7、iOS 8屏幕适配

在iOS 8中,[UIScreen bounds] .[UIScreen applicationFrame] .Status bar.Keyboard这些frame都是根据设备真实方向来返回frame的,而在iOS 7中,不过是横屏还是竖屏,iOS总是返回竖屏的frame,如以下输出: iOS 7: 竖屏: UIScreen.mainScreen().bounds: (0.0,0.0,320.0,568.0) 横屏: UIScreen.mainScreen().bounds: (0.0,0.0,

iOS开发技巧 - Size Class与iOS 8多屏幕适配(一)

0. 背景: 在iOS开发中,Auto Layout(自动布局)能解决大部分的屏幕适配问题. 但是当iPhone 6和iPhone 6 Plus发布以后, Auto Layout已经不能解决复杂的屏幕适配问题了, 因此, 在iOS 8以后苹果推出了Size Class, 它是基于Auto Layout技术的.   1. Size Class的开启和使用 与Auto Layout不同, Size Class不能通过代码编程管理,只能通过IB(Interface Builder)使用. 默认情况下S

ios-iOS iphone和iPad屏幕适配

问题描述 iOS iphone和iPad屏幕适配 怎么做一个能同时适配iPhone和iPad的APP,两套xib共用一套代码,xcode用的是最新的xcode7 解决方案 ios xib适配iPhone,iPad语句iOS:适配iPad的横屏Iphone图像渲染与屏幕适配 解决方案二: 你这个问题太宽泛了,要细化 解决方案三: 主要问题是在于分辨率,界面要自适应,可以缩放,如果感觉麻烦,也可以根据分辨率来写死,界面分成两套,但逻辑是一套 解决方案四: 主要问题是在于分辨率,界面要自适应,可以缩放

ios-xcode屏幕适配问题!!!

问题描述 xcode屏幕适配问题!!! 一个app想适配不同的iPhone屏幕,我们老师讲两种方式,一个是代码里不要将每个控件的frame写死,而是用变量设置,通过UIScreen mainScreen 得到屏幕的大小,就可以动态改变控件的大小,来完成适配.还有一个方法就是在xib里进行控件的自动布局,之前也一直使用这两个方法,但是比较繁琐.最近突然发现,如果把项目里自带的lunchScreen.xib删除,或许自己创建一个View作为载入的时候,xcode会自动拉伸屏幕,所有控件都跟着屏幕等比

Android屏幕适配全攻略(最权威的官方适配指导)

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习本文,对于Android的屏幕适配,你将有所收获! Android屏幕适配出现的原因 重要概念 屏幕尺寸 屏幕分辨率 屏幕像素密度 dpdipdpisppx mdpihdpixdpixxdpi 解决方案 支持

利用onMeasure测量来实现图片拉伸永不变形,解决屏幕适配问题

上一篇文章详细讲解了一下onMeasure/measure方法在Android自定义控件时的原理和作用,参看博文:Android自定义控件系列七:详解onMeasure()方法中如何测量一个控件尺寸(一),今天就来真正实践一下,让这两个方法大显神威来帮我们搞定图片的屏幕适配问题. 请尊重原创劳动成果,转载请注明出处:http://blog.csdn.net/cyp331203/article/details/45038329,非允许请勿用于商业或盈利用途,违者必究. 使用ImageView会遇到