AutoLayout怎么在iOS中使用-创新互联

这篇文章给大家介绍AutoLayout怎么在iOS中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

为平安等地区用户提供了全套网页设计制作服务,及平安网站建设行业解决方案。主营业务为做网站、成都网站建设、平安网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

AutoLayout 问题

  • 布局冲突

  • 固有尺寸冲突

  • 布局和固有尺寸冲突

主要概念

  • 固有尺寸 intrinsicContentSize(意思就是说我知道自己的大小,如果你没有为我指定大小,我就按照这个大小来。)

  • hugging,compress

  • priority

  • constraint:equal,unequal

一个UIView显示,需要有2个元素,position & size。AutoLayout可以确定view 的这两个,so 不用frame。

1、布局遇到的问题

布局绝对冲突:

eg 设置了 view 的左右,然后又有个 width,造成冲突

  解决方案:

   1.设置优先级(低优先级constraint没有用到的时候的时候系统默认忽略)

   2.删除没有的constraint(常用)

2、布局模糊冲突

   假设UIView2的宽度不能超过50。当UIView1宽度小于50的时候,二者等宽;

   当UIView1宽度大于50的时候,UIView2不受UIView1宽度的影响。 

   于是给UIView2加上一条约束:宽度<=50。这时候冲突来了:

因为UIView1的宽度是定好的,而UIView2和UIView1等宽。那么UIView2的宽度就是确定的。

   so 当宽度 > 50 的时候,就是冲突,<= 50 的时候就不是冲突

   解决方案:

       equal width priority 设置低一些,这样让 View2 先满足<= 50的 constraint,当他的width <= 50 的时候equal width生效

enum {
 UILayoutPriorityRequired = 1000,
 UILayoutPriorityDefaultHigh = 750,
 UILayoutPriorityDefaultLow = 250,
 UILayoutPriorityFittingSizeLevel = 50,
};

1、intrinsic冲突

content Hugging/content Compression Resistance 设置优先级解决intrinsicContentSize

  • Hugging (不想填充空间)

  • Compression (不想被挤压)

  • 有这两个特性的 view 一定实现了 intrinsicContentSize

  • Hugging 默认 priority = 250

  • Compression 默认 priority = 750

  • 其他 constraint 默认 priority = 1000(大)

当 constraint.priority > hugging.priority View会被拉伸

当 constraint.priority < hugging.priority View会被抱紧在priority小的那一边

当 constraint.priority > compression.priority View 会被挤压

当 constraint.priority < compression.priority View 不会被挤压

   eg UILabel 有intrinsicContentSize 那么UILabel的size 就用它,

   如果有constraint 设置了 size 那么使用 constraint的

   UILabel1、和UILabel2布局 :

   距离上边栏都是50点。 UILabel1与左边栏距离为10,UILabel2左面距离UILabel1为10点。

   因为都具有Intrinsic属性,所以不需要指定size,位置应该也明确了。

   再给UILabel2加一条约束,右侧距离右边栏为10点。(如果view 没有intrinsicContentSize,那么右边的view 会被拉伸)

   因为 UILabel 有intrinsicContentSize 所以2个Labe 必须有一个要被拉伸

   * 1个label 使用自己的intrinsic,另一个填充其他空间

使用场景

1、没有 intrinsicContentSize 的view 使用 priority,将模糊冲突改变成条件布局

2、有 intrinsicContentSize 的view

      改变hugging or compression 的priority,解决intrinsic 冲突

      虽然有intrinsic 只要给出origin 和 size 就可以了,可是使用 unequal constraint 完善布局,避免警告

      主要接口 & 属性

UILabel 的preferredMaxLayoutWidth,如果有多行要设置正确的preferredMaxLayoutWidth,来得到 正确的intrinsicContentSize

systemLayoutSizeFittingSize 调用 intrinsicContentSize

layoutIfNeed 如果有布局变化强制刷新

当视图的内在内容改变时,需要调用 invalidateIntrinsicContentSize ,让系统知道在下次布局时重新计算intrinsicContentSize

// 原有的视图尺寸和现在的不相符,
- (void)layoutSubviews {
 [super layoutSubviews];
 _collectionView.frame = self.bounds;
 if (!CGSizeEqualToSize(self.bounds.size, [self intrinsicContentSize])) {
 [self invalidateIntrinsicContentSize];
 }
}

关于AutoLayout怎么在iOS中使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

分享名称:AutoLayout怎么在iOS中使用-创新互联
标题网址:https://www.cdcxhl.com/article44/coigee.html

成都网站建设公司_创新互联,为您提供网站策划手机网站建设网站制作虚拟主机网站设计公司网站内链

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

外贸网站建设