TAG

RSS订阅

收藏本站

设为首页

当前位置:主页 > 移动开发 > IOS开发 >

iOS10适配过程中masonry自动布局出错问题的一种解决办法

发布时间:2017-03-06 23:45 类别:IOS开发

iOS10适配过程中masonry自动布局出错问题的一种解决办法
前两天通过Xcode8提交的适配iOS10的应用新版本终于成功上线,然而在预定上线时间的头一天下午才开始将Xcode升级到8.0版本,之后的一路坑终于摸索着过来了,其中推送、基本设置、相机等权限问题都有很多资料提供,而关于masonry适配问题,只是说之前iOS版本下对masonry使用所写代码并不规范不够严谨,但也没具体给出解决方案。
 
本人先是选择一处出现问题的cell的自动布局改为预先计算frame模型来解决这个问题,也就是说放弃使用masonry,但的确是太耗费功夫,眼看第二天就要打包提交应用商店,不能忍,就继续摸索masonry到底问题出在哪儿了,还好最后找出一种解决方案。下面以代码来说明,首先贴出之前的代码:
 
- (void)layoutSubviews {
 
[super layoutSubviews];
 
……
 
[self.bottomLineView mas_makeConstraints:^(MASConstraintMaker *make) {
 
make.top.leading.trailing.mas_equalTo……;
 
make.height.mas_equalTo(kLineHeight);
 
}];
 
[self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
 
make.top.leading.trailing.mas_equalTo(self);
 
make.bottom.mas_equalTo(self.bottomLineView);
 
}];
 
}
 
这里是我平时使用masonry的写法,也就是说self.contentView的bottom是根据self.bottomLineView计算出来的,这样写在iOS10之前完全没问题,然而当升级到Xcode8之后再Run控制台就出现了布局有问题,列举一堆计算contentView高度时的约束,最后说self.contentView.height == 0,这就是问题所在了。多次尝试修改,终于发现按照下面方式修改就没问题了:
 
- (void)layoutSubviews {
 
[super layoutSubviews];
 
……
 
[self.bottomLineView mas_makeConstraints:^(MASConstraintMaker *make) {
 
make.top.leading.trailing.mas_equalTo……;
 
make.height.mas_equalTo(kLineHeight);
 
make.bottom.mas_equalTo(self.contentView);
 
}];
 
[self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
 
make.top.leading.trailing.bottom.mas_equalTo(self);
 
}];
 
}
 
显然,我只是将原本self.contentView的bottom约束写到了约束它的self.bottomLineView的约束条件中,而将self.contentView的约束条件改为四个边全都等于cell自身(self),就这样,问题就解决了……
猜你会喜欢....

Copyright © 2015 www.wahenzan.com 哇!很赞 版权所有 浙ICP备14030256号-1 Power by DedeCms

浙公网安备 33010602005986号

声明:本站所有文章除标明原创外,均来自网络转载,版权归原作者所有,如果有侵犯到您的权益,请联系本站删除 网站管理员:758763728

360网站安全检测平台