好久没有写文章了,把之前整理出的一些文章进行发一发,也算是给自己进行温习,期望可以帮到有需求帮助的人

iOS现在的干流布局办法为 纯代码布局 和 XIB布局。

各自优缺陷:

纯代码

  • 长处
  1. 万物皆可纯代码,修正灵活性较好。
  2. 只占用一个文件。
  3. 可以灵活运用多种布局结构辅佐完成布局。
  4. 复用性好,差异不大的布局只需求复制过来修正少部分就可以。
  5. 版别处理友爱,在codeReview时一目了然
  6. 纯代码界面加载速度和运转速度较快
  • 缺陷
  1. 布局繁琐,界面越杂乱布局代码越多,调UI查看效果不直观。

  2. 相对简略的功能花费的时刻较长

  3. 捆绑冲突不清楚,在编码过程中无法排查捆绑冲突

XIB布局:

  • 长处
  1. XIB布局运用的是AutoLayout,布局效果支撑预览,所见即所得,捆绑布局更直观。
  2. 相对杂乱的布局,可读性好
  3. 在子控件低于60个左右时,界面加载速度和运转速度和纯代码距离不明显。
  4. 开发效率明显,布局层级清楚。
  5. 捆绑冲突清楚可见,在编码过程中可躲避大部分捆绑问题
  • 缺陷
  1. 版别处理时,无法一目了然看清修正项
  2. 多占用一个资源文件,占用编译时刻
  3. 没有构成共同标准时,XIB在迭代过程中将会是一个噩梦。

怎样取舍:

根底规矩:

XIB只适用于可以 StackView 布局,或许非常简略的惯例布局。
封装的父View或许Cell 假设子控件多于60个,只能运用纯代码布局。

关于一级页面

    • 为寻求极致的体会,关于子控件多于30个的cell,运用纯代码布局。

    • 子控件少于30个的cell,假设可以运用StackView进行布局的,优先引荐运用XIB,无法运用StackView布局的 Cell 运用纯代码布局。

    • 关于View的封装和Cell的规矩保持共同,相同适用于以上两点。

运用标准:

命名标准

假设运用的是UIStackView 布局,在命名时需求将axis 写出来,比方论题的水平捆绑view,可以命名为topicHorizontalStackView。

添加subView时,请运用addArrangedSubview 办法进行添加,布局是否隐藏请运用 isHidden。详细可 参考HomeRecommendFeedInfoView

注释标准

将封装的 Cell 或许 View 写明注释,用于什么页面。

子控件代表什么

StackView & frame

tip:
在布局的过程中,假设是纯代码布局,可能会出现(通过 运转时 → Debug → View Debugging → Capture View Hierarchy 查看)

StackView & frame

出现这种问题的原因是布局过程中,在水平或许垂直方向上,捆绑缺失,相同的一个方向,不知道该优先缩放或许裁切哪个控件。

此刻只需求指定优先级。

StackView & frame

contentHuggingHorizontalPriority &contentHuggingVerticalPriority (水平抗紧缩系数和垂直抗紧缩系数)

默认值为 250,设置值越小代表越简单被拉伸,即越难被紧缩。

举个例子:

label 设置水平249,那么就越简单被拉伸

StackView & frame

label 设置水平为251,那么就比第二更难被拉伸

StackView & frame

代码设置办法为

topicLabel.snp.contentHuggingHorizontalPriority= 251 或许topicLabel.setContentHuggingPriority(UILayoutPriority(rawValue:251),for: .vertical)

contentCompressionResistanceHorizontalPriority &contentCompressionResistanceVerticalPriority (水平优先裁剪系数和垂直优先裁剪系数)

默认值为 750,设置值越小代表越简单被裁剪。

举例说明:

第一 label 设置水平749,那么第一就越简单被裁剪

StackView & frame

第一 label 设置水平751,那么第二就越简单被裁剪

StackView & frame

布局标准

关于动态布局的卡片或许Cell,优先运用StackView进行布局。StackView可以自定义空隙,通过运用 setCustomSpacing(2, after: puNameL)

详细的StackView运用办法可以查看苹果官方文档UIStackView官方文档

项目中的动态卡片假设运用XIB,不要通过运用 Constraint 进行捆绑更新,而应该运用UIStackView的isHidden特点

关于XIB布局,怎样快速查看布局的层级

方案一:

翻开XIB文件,例如:

StackView & frame

将文本进行填充,将子控件进行颜色填充,层级效果一目了然,比方:

StackView & frame

通过 Preview查看效果和捆绑

StackView & frame

方案二:

通过 Debug View Hierarchy 进行查看,Cell的卡片层级一目了然

StackView & frame

运用纯代码布局可运用方案二查看捆绑层级结构。

假设排查捆绑冲突:

通过设置 UIViewAlertForUnsatisfiableConstraints,可以将捆绑的冲突打印在操控台上

StackView & frame