使用 AutoLayout 时子视图 Rect 不等于视图 Rect
Posted
技术标签:
【中文标题】使用 AutoLayout 时子视图 Rect 不等于视图 Rect【英文标题】:subview Rect doesn't equal view Rect when using AutoLayout 【发布时间】:2016-07-17 00:28:08 【问题描述】:我正在使用自动布局和大小类。我在主视图下有一个测试视图,如下所示:
包含所有 6 个约束:
预期的结果应该是测试视图具有完全相同的 Rect 值。但事实并非如此。我究竟做错了什么?我怎样才能实现这种行为?
viewDidLoad 日志:
iPhone 5:
主视图 - NSRect:0, 0, 320, 568
测试视图:NSRect:0, 0, 600, 600
iPhone 6:
主视图 - NSRect:0, 0, 375, 667
测试视图:NSRect:0, 0, 600, 600
【问题讨论】:
【参考方案1】:正如这个答案中所指定的,always 600x600,您需要在 viewDidLayoutSubviews 中打印您的日志。视图是否正确显示?
此外,如果您将边缘设置为与父对象相同,则不需要宽度和高度约束,但这是一件小事。
希望对您有所帮助,如果您仍有问题,请发表评论,祝您好运。
【讨论】:
天啊....谢谢。这完全有道理。这意味着我应该在viewDidLayoutSubviews
函数中配置我的视图。
@docchang:我更喜欢在viewWillLayoutSubviews 中进行视图配置。在此方法中,[[UIApplication sharedApplication] statusBarOrientation]
正确反映了任何飞行中方向更改转换的最终状态,这会影响布局。因此,如果由于方向更改而需要交换视图,请在此处进行。以上是关于使用 AutoLayout 时子视图 Rect 不等于视图 Rect的主要内容,如果未能解决你的问题,请参考以下文章
创建UICollectionViewCell时子视图帧不正确
创建 UICollectionViewCell 时子视图框架不正确