我是一名新开发者iOS。
我使用自动布局。
我有问题。在约束之后,我无法获得UIView的真实大小。
示例,当我想要约束
获取UIView
的大小时
self.container.frame.size.height
对于所有设备尺寸,它总是返回550。但是当我在差异设备上运行它时,我可以看到它有不同的大小。
由于
答案 0 :(得分:44)
在“获取实际大小代码”之前,请插入以下代码:
[view setNeedsLayout];
[view layoutIfNeeded];
答案 1 :(得分:17)
由于每个人都认为访问是通过UIViewController
而不是UIView
子类内部进行的,因此答案并不是真正有用的。获取UIView
子类的正确大小的正确方法是layoutSubviews
。
答案 2 :(得分:15)
最简单的解决方案是在-viewDidAppear:
中运行该代码(在运行autolayout之后)。
答案 3 :(得分:10)
您可以使用UIView
方法intrinsicContentSize
答案 4 :(得分:7)
这太棒了。
如果您想在自动布局使用期间不使用layoutsubviews方法获取帧,请使用此方法:
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"View frame: %@", NSStringFromCGRect(view.frame));
})
答案 5 :(得分:6)
好像您正在寻找- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize;
:
返回值
视图的大小,满足它所拥有的约束。讨论
考虑到它所拥有的所有约束及其子视图的约束,确定视图的最佳大小。
答案 6 :(得分:1)
最好的时刻是在viewDidLayoutSubviews
期间,因为它发生在viewDidAppear
之前,因此您仍然可以在显示视图之前进行一些修改。
答案 7 :(得分:1)
[view layoutIfNeed]救救我。
使用此方法在绘制前强制子视图的布局。使用以根视图接收消息的视图,此方法从根开始布置视图子树。
调用此方法后,我可以在xib中获得自定义视图的实际大小。 非常感谢@Allen和作者。