约束布局之旅—1

作者: osbornZ | 来源:发表于2017-05-29 15:44 被阅读48次

约束方式

只有iPhone4的时候,我们可以在代码里将没一个可视单元的位置写死,这样是没问题的,但随着iPhone5、6的发布;布局情况就越来越微妙,苹果也是持续在优化整合更新约束布局方式。

  • Autoresizing属性,仅能调整视图变化相对于父类进行适配,对于兄弟关系无法处理;

  • Autolayout iOS-6之后;
    能够让我们对任一元素在屏幕下有着唯一的位置约束即绝对定位,严格意义是能够唯一确定其位置约束、大小尺寸;VFL(Visual Format Language)方便书写; Masonry

UIView (UIConstraintBasedCompatibility)   
@property(nonatomic) BOOL translatesAutoresizingMaskIntoConstraints

When you elect to position the view using auto layout by adding your own constraints, you must set this property to NO. IB will do this for you.
  • SizeClass iOS8中新增的,对应xcode 6.0;扩展了3*3种不同的组合界面,方便我们对不同尺寸布局在一个地方集中完成, 类似于 UIButton的不同状态设置( Default、selected、highlight);

  • 而xcode 8.0则删除了 SizeClass,对应iOS 10,取而代之的是 trait variations ,主要是进行特征划分和对应设备的自定义布局;

  • UIStackView 也是相对于布局产生的UI控件,Stack View最有用的就是它会自动为每个subview创建和添加Auto Layout constraints。当然你可以控制subview的大小和位置。可以通过选项配置subview的大小、排布以及彼此间的间距。

调试

Symbolic Breakpoint: UIViewAlertForUnsatisfiableConstraints

  1. 打开断点导航(cmd+7)
  2. 点击左下角的+按钮
  3. 选择Add Symbolic Breakpoint
  4. 在Symbol添加UIViewAlertForUnsatisfiableConstraints; Action 添加__"po [[UIWindow keyWindow] autolayoutTrace]"或 "expr -l objc++ -O -- [[UIWindow keyWindow] autolayoutTrace]"(Swift) 或者LLDB 调试找到 AMBIGUOUS 点。

iOS10 约束问题

大家应该都有碰到取到的视图为1000*1000的。主要问题是在View的 awakeFromNib,或者VC的viewDidLoad,获取当前视图的frame或者bounds的size布局会导致界面异常。

解决方案:

  1. 全部用autolayout布局,不取frame或者bounds
  2. awakeFromNib,或者viewDidLoad要使用frame或者bounds前,先调用视图的layoutIfNeeded。这个要注意,有发现viewDidLoad调用后,取到的frame的origin还是错误的,不过size是对的.
  3. 在View的layoutSubviews或者VC的 viewDidLayoutSubviews再去获取当前视图的frame或者bounds布局

相关文章

  • 约束布局之旅—1

    约束方式 只有iPhone4的时候,我们可以在代码里将没一个可视单元的位置写死,这样是没问题的,但随着iPhone...

  • 约束布局之旅—2

    Layout相关 UIView(UIViewHierarchy)setNeedsLayout (标记为需要...

  • ConstraintLayout(约束布局)

    ConstraintLayout(约束布局) 学习约束布局以记之~ 1.Circular positioning(...

  • 2018-10-31

    ios布局约束 关于布局约束的发展史: 1.通过代码计算fram...

  • Jetpack Compose 的约束布局ConstraintL

    1.Android虽然支持约束布局,但是我们还是推荐使用约束盒子布局,嵌套虽然增多,但是代码量整体减少。 2.约束...

  • 2019-03-15

    实验内容:关于线性布局、约束布局及表格布局的使用 主要代码: 主界面: 线性布局: 约束布局: 表格布局: 截图:...

  • Android布局之ConstraintLayout

    1.简介 ConstraintLayout是一个ViewGroup,翻译为约束布局,约束布局的出现主要是为了解决布...

  • Andoird 约束布局笔记

    都8102年了,赶紧来学一下约束布局ConstraintLayout 约束布局。约束贯穿这个布局的使用方式。 定位...

  • 安卓布局详解

    今天要讲的布局就是线性布局、相对布局和约束布局 1.LinearLayout: -线性布局,两种排法:水平and...

  • Android布局、图案解锁

    今天要讲的布局就是线性布局、相对布局和约束布局 1.LinearLayout: -线性布局,两种排法:水平and...

网友评论

    本文标题:约束布局之旅—1

    本文链接:https://www.haomeiwen.com/subject/fwokfxtx.html