autolayout布局经典文章加github
【链接】开始iOS7中自动布局教程(一)
http://blog.csdn.net/nogodoss/article/details/17246423
http://blog.ibireme.com/2014/09/16/adapted_to_iphone6/
【链接】TheUltimateGuideToiPhoneResolutions
https://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions
开始:
代码实现Autolayout的注意点
要先禁止autoresizing功能,设置view的下面属性为NO
view.translatesAutoresizingMaskIntoConstraints=NO;
添加约束之前,一定要保证相关控件都已经在各自的父控件上
不用再给view设置frame
1.self.view 需要改成self.collection
2. 加上
_tableView.estimatedRowHeight = 80.0f;
#ifdef IOS_8_NEW_FEATURE_SELF_SIZING
// iOS 8 的Self-sizing特性
if ([UIDevice currentDevice].systemVersion.integerValue > 7) {
_tableView.rowHeight = UITableViewAutomaticDimension;
}
3.
// 注册Cell
[_tableView registerClass:[Case4Cell class] forCellReuseIdentifier:NSStringFromClass([Case4Cell class])];
4.
1._titlelabel.preferredMaxLayoutWidth = kScreenWidth - kIconRectangleWidth - kDefaultMargin * 3;
preferredMaxLayoutWidth属性必须写
2.UIbutton的text的例如:_commentsButton.titleLabel.numberOfLines=1; 必须修改
5.
#ifdef IOS_8_NEW_FEATURE_SELF_SIZING
// iOS 8 的Self-sizing特性
return UITableViewAutomaticDimension;
#else
ios 8.0以下的,ios7 以上必须
CollectionView 中的 cell 自适应
在 collection view 中也能让 cell 自适应内容大小,如果 UICollectionView 的 layout 是一个 UICollectionViewFlowLayout,只需要将 layout.itemSize = ... 改成 layout.estimatedItemSize = ...。 只要设置了 layout 的 estimatedItemSize,collection view 就会根据 cell 里面的 autolayout 约束去确定cell 的大小。
原理:
1.collection view 根据 layout 的 estimatedItemSize 算出估计的 contentSize,有了 contentSize collection view 就开始显示
2.collection view 在显示的过程中,即将被显示的 cell 根据 autolayout 的约束算出自适应内容的 size
3.layout 从 collection view 里获取更新过的 size attribute
4.layout 返回最终的 size attribute 给 collection view
5.collection 使用这个最终的 size attribute 展示 cell
总结
这次 iOS 8 的发布对 UI 开发来说是越来方便了,很多以前需要写大量计算的代码现在都可以通过拖拖 IB 上的 UI 控件就可以实现了,当然首先你要会 autolayout。 如果很幸运的在开发 iOS 8 only 的应用,真的可以删除heightForRowAtIndexPath中那些繁重的计算代码了!让 autolayout 帮我们完成所有的工作吧