使用自动布局读取 UI 正确框架
Posted
技术标签:
【中文标题】使用自动布局读取 UI 正确框架【英文标题】:read UI correct frame with Autolayout 【发布时间】:2015-02-17 10:50:20 【问题描述】:我有一个UIViewController
,里面有UIScrollView
。滚动视图会根据设备屏幕自动调整其框架。
我的问题是在代码中我无法读取正确的滚动视图框架。
self.scrollView.frame
总是返回 0, 0, 600, 600
这是 Interface Builder xib 中视图控制器的默认大小。
我尝试了viewDidLoad
和loadView
方法,但框架仍然是0, 0, 600, 600
。
- (void)viewDidLoad
[super viewDidLoad];
self.scrollView.pagingEnabled = YES;
self.scrollView.delegate = self;
NSLog(@"%@",NSStringFromCGRect(self.scrollView.frame));
想法?
【问题讨论】:
可能在 AutoLayout 运行之前调用它。发布您的代码 编辑。如何确定 AutoLayout 已完成? 在 viewDidLoad 中为时过早。在 viewDidAppear 中尝试 ios AutoLayout - get frame size width 的可能重复项 我觉得你可以改用self.view.bounds
。
【参考方案1】:
您可以在 viewController 的 -(void)viewDidLayoutSubviews
方法中获取正确的帧
【讨论】:
它可以工作,但-(void)viewDidLayoutSubviews
被调用了两次。相反,viewDidAppear
被调用一次
这个方法被调用n次,其中n是视图布局的编号。【参考方案2】:
当你在应用布局约束后需要正确的框架时写在下面两行
[self.view setNeedsLayout];
[self.view layoutIfNeeded];
【讨论】:
以上是关于使用自动布局读取 UI 正确框架的主要内容,如果未能解决你的问题,请参考以下文章