我是一名新的开发人员iOS。如何通过自动布局获得实际大小的UIView
我使用自动布局。
我有一个问题。约束后我无法获得真实大小的UIView。
例如,当我想要得到的UIView
大小与约束
self.container.frame.size.height
它送花儿给人的所有设备大小返回550。但是当我在不同的设备上运行它时,我可以看到它有不同的大小。
感谢
我是一名新的开发人员iOS。如何通过自动布局获得实际大小的UIView
我使用自动布局。
我有一个问题。约束后我无法获得真实大小的UIView。
例如,当我想要得到的UIView
大小与约束
self.container.frame.size.height
它送花儿给人的所有设备大小返回550。但是当我在不同的设备上运行它时,我可以看到它有不同的大小。
感谢
最简单的解决方法就是运行-viewDidAppear:
代码(自动版式已运行后)。
最好的时刻是在viewDidLayoutSubviews
期间,因为它发生在viewDidAppear
之前,因此您仍然可以在显示视图之前做一些修改。
你可以只使用UIView
方法intrinsicContentSize
这应该是正确的答案。如果您以编程方式进行自动布局,而不是明确设置框架,则这是根据内容获取高度/重量的正确方法。 – Marquis103
你的 “得到真正的尺寸代号” 之前,插入下面的代码:
[view setNeedsLayout];
[view layoutIfNeeded];
恕我直言,不需要同时调用'[view setNeedsLayout]'和'[view layoutIfNeeded]',只有后者对于'viewWillLayoutSubviews'中的我来说已经足够了。 – schmidt9
它不起作用 –
由于每个人都认为访问是通过完成的而不是在UIView
子类中,答案并不证明真的有用。获得UIView
子类的正确大小的正确方法是layoutSubviews
。
[view layoutIfNeed]救救我。
使用此方法可在绘制之前强制子视图的布局。使用接收消息作为根视图的视图,此方法将从根开始的视图子树布局。
调用此方法后,我可以在xib中获得自定义视图的实际大小。 非常感谢@Allen和作者。
这太棒了。
如果你想获得帧没有自动布局在使用过程中使用layoutsubviews方法,使用这一个:
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"View frame: %@", NSStringFromCGRect(view.frame));
})
谢谢你的想法。这里没有什么奇怪的:你在回到主调度队列后要求调用这个代码。这将在自动布局发生后发生。的确非常有用! – ishahak
谢谢。萨姆说并不奇怪。也是比这个子类更好的解决方案。 –
好像- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize;
是你在找什么:
返回值
的满足其约束条件的视图大小。讨论
确定视图的最佳尺寸,考虑它所拥有的所有约束及其子视图的最佳尺寸。
感谢。但如何做,如果我想在viewDidLoad中获得真正的大小。你有任何解决方案? – Chicken
@Chicken见艾伦的解决方案。这将强制自动布局立即运行。你真的应该避免做这种事情,尤其是不止一次。 – Oxcug