Masonry 调试过程中遇到的注意事项

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 帮我们完成所有的工作吧

你可能感兴趣的:(Masonry 调试过程中遇到的注意事项)