UILayout+SizeClasses不常见的使用场景

  • AutoLayout
    这个技术我不想赘述了,现在直说一些大家不常用到的

  • 第一 Priority属性

  • 观察Three


    UILayout+SizeClasses不常见的使用场景_第1张图片
    Paste_Image.png
  • 我设置了两条虚线,第一条是距离Two 的 第二条是距离One的

  • 设置它们的Priority属性


    UILayout+SizeClasses不常见的使用场景_第2张图片
    Paste_Image.png
UILayout+SizeClasses不常见的使用场景_第3张图片
Paste_Image.png
  • 在一个低 一个高的情况下 高的约束先执行

  • 当我们点击Hide two按钮的时候 修改Priority属性

@IBAction func hideTwoClick(sender: AnyObject) {
        self.twoBtn.hidden = !self.twoBtn.hidden
        if self.twoBtn.hidden {
            self.threeToTwoConstraint.priority = 750
            self.threeToOneConstraint.priority = 999
        }else{
            self.threeToTwoConstraint.priority = 999
            self.threeToOneConstraint.priority = 750
        }
    }```

- 可以看到如下效果

![AutoLayout_priority.gif](http://upload-images.jianshu.io/upload_images/189984-bd3efb93ccdacf8c.gif?imageMogr2/auto-orient/strip)

##### 内容约束优先级的使用

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/189984-74ae35b04c6ca260.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 看下图 我们自己制作一个导航栏

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/189984-4a8005ffdb550cb4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 现在的需求是关闭按钮有可能消失,title文字不确定。

我们现在给title添加约束 使其左右距离关闭(返回)或者菜单按钮的距离大于0,但是你这样设置后当title文字过多的时候,会把关闭或者返回按钮的宽度挤掉(前提是返回和关闭按钮文字都是动态的宽度),为什么为出现这种问题?是因为返回按钮和关闭按钮内容的优先级低于titleLabel的优先级,我们提高其优先级即可。

我们设置其横向内容优先级为1000
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/189984-aece08c07c64a6e2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

设置title横向内容优先级为750或者只要低于1000即可

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/189984-5f6565437cffbea7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 如此 当title文字过多的时候,就会保证在返回按钮文字优先级的前提下适当排列titleLabel的文字了。

- 最后我们设置title距离左右按钮的space大于0 即可。

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/189984-6cce8e04400b1627.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 第三个问题 由于导航栏上面有状态栏,而我们返回按钮要在状态栏下面的44的高度居中,怎么设置呢?


![Paste_Image.png](http://upload-images.jianshu.io/upload_images/189984-2a34b82b892430b3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 选择返回按钮 向上拉线 然后选择约束 修改其center.y为42即可,42=20+44/2,即为除去状态栏的中间位置。

###SizeClasses
- 有时候,我们的项目需要支持横屏,那么SizeClasses就派上用场了。

- 关于基础用法,不再赘述,现在只说一个问题,就是在使用SizeClasses的时候,我们选择不同的屏幕模式,来修改UI,其效果是不同的。

- 如果App只适用于竖屏模式,我们只需要选择下面模式,然后加约束即可。

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/189984-d715680a7cc89e36.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

这种模式下,便可以适应所有的竖屏手机,但是以后产品经理想法变了,想支持横屏,并且UI布局也有变化,那么就无能为力了。我们选择所有横屏发现之前的UI全没了。

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/189984-16eba7d066636719.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 所以 建议大家在使用SizeClasses的时候,先把必须实现的UI拖拽到下面的模式下,这种模式下的UI无论你怎么切换适配模式,UI都不会丢失。

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/189984-38ac86c05efdc9fc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 然后在需要其他布局的时候,选在不同的屏幕模式约束即可。这样就可以应万变了。。




你可能感兴趣的:(UILayout+SizeClasses不常见的使用场景)