如何使用autolayout获得真正大小的UIView

时间:2014-12-26 05:45:37

标签: ios autolayout ios-autolayout

我是一名新开发者iOS。

我使用自动布局。

我有问题。在约束之后,我无法获得UIView的真实大小。

示例,当我想要约束

获取UIView的大小时
self.container.frame.size.height

对于所有设备尺寸,它总是返回550。但是当我在差异设备上运行它时,我可以看到它有不同的大小。

由于

8 个答案:

答案 0 :(得分:44)

在“获取实际大小代码”之前,请插入以下代码:

[view setNeedsLayout];
[view layoutIfNeeded];

答案 1 :(得分:17)

由于每个人都认为访问是通过UIViewController而不是UIView子类内部进行的,因此答案并不是真正有用的。获取UIView子类的正确大小的正确方法是layoutSubviews

答案 2 :(得分:15)

最简单的解决方案是在-viewDidAppear:中运行该代码(在运行autolayout之后)。

答案 3 :(得分:10)

答案 4 :(得分:7)

这太棒了。

如果您想在自动布局使用期间不使用layoutsubviews方法获取帧,请使用此方法:

dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@"View frame: %@", NSStringFromCGRect(view.frame));
    })

答案 5 :(得分:6)

好像您正在寻找- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize;

  

返回值
  视图的大小,满足它所拥有的约束。

     

讨论
  考虑到它所拥有的所有约束及其子视图的约束,确定视图的最佳大小。

https://developer.apple.com/documentation/uikit/uiview/1622624-systemlayoutsizefittingsize?language=objc

答案 6 :(得分:1)

最好的时刻是在viewDidLayoutSubviews期间,因为它发生在viewDidAppear之前,因此您仍然可以在显示视图之前进行一些修改。

答案 7 :(得分:1)

[view layoutIfNeed]救救我。

使用此方法在绘制前强制子视图的布局。使用以根视图接收消息的视图,此方法从根开始布置视图子树。

调用此方法后,我可以在xib中获得自定义视图的实际大小。 非常感谢@Allen和作者。