AutoLayout适配时,如何获得AutoLayout完成适配后的子控件的真实frame
2016-03-31 20:40
661 查看
在使用了AutoLayout后,一些主动调整高度的控件,如UIImageView, UILabel,UIButton等,不会在更新(updateConstraintsIfNeeded)后,获取到frame,这时候获取到的frame还是上一次的frame,实验了好久,终于找到方法了。
如果你的是UIViewController,每次更新后会调用 viewDidLayoutSubviews 方法,我们可以在这里计算更新后的高度,如:
- (void)viewDidLayoutSubviews {
[super
viewDidLayoutSubviews];
NSLog(@"%@",
_contenLabel);
[_scrContainViewHeightConstaint
setConstant:CGRectGetMaxY(_contenLabel.frame)];
[_scrContaintView
updateConstraintsIfNeeded];
}
如果你用的是UIView,我们可以在 layoutSubviews 方法计算更新后的高度, 如:
-(void)layoutSubviews {
[super
layoutSubviews];
[self
setNeedsLayout];
[self
layoutIfNeeded];
NSLog(@"%@", _contenLabel);
[_scrContainViewHeightConstaint setConstant:CGRectGetMaxY(_contenLabel.frame)];
[_scrContaintView updateConstraintsIfNeeded];
}
如果你的是UIViewController,每次更新后会调用 viewDidLayoutSubviews 方法,我们可以在这里计算更新后的高度,如:
- (void)viewDidLayoutSubviews {
[super
viewDidLayoutSubviews];
NSLog(@"%@",
_contenLabel);
[_scrContainViewHeightConstaint
setConstant:CGRectGetMaxY(_contenLabel.frame)];
[_scrContaintView
updateConstraintsIfNeeded];
}
如果你用的是UIView,我们可以在 layoutSubviews 方法计算更新后的高度, 如:
-(void)layoutSubviews {
[super
layoutSubviews];
[self
setNeedsLayout];
[self
layoutIfNeeded];
NSLog(@"%@", _contenLabel);
[_scrContainViewHeightConstaint setConstant:CGRectGetMaxY(_contenLabel.frame)];
[_scrContaintView updateConstraintsIfNeeded];
}
相关文章推荐
- RBAC基于角色的权限访问控制
- [国嵌攻略][173][BOA嵌入式服务器移植]
- 检测浏览器是否属于W3C盒子模型
- FileStatus的主要方法的使用(源码)
- CAP理论
- Atitit.js的键盘按键事件捆绑and事件调度
- 1005-F
- linux 小程序分析
- 初识分布式
- HashMap的key是对象
- 树莓派启动:for Mac
- Atitit.js的键盘按键事件捆绑and事件调度
- Python:的web爬虫实现及原理(BeautifulSoup工具)
- 【BZOJ1296】[SCOI2009]粉刷匠【区间DP】【背包DP】
- 生产者/消费者模式 (java)
- TCP头校验和计算算法详解
- I
- 三角形圆心算法
- 自动检测注入Bean
- java.lang.ClassNotFoundException: org.springframework.web.context.request.RequestContextListener