使用自动布局读取 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 中视图控制器的默认大小。

我尝试了viewDidLoadloadView 方法,但框架仍然是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 正确框架的主要内容,如果未能解决你的问题,请参考以下文章

自动布局约束如何与 SwiftUI 框架一起使用 [重复]

UILabel 有时不能正确换行(自动布局)

UIView 使用自动布局调整大小,但在运行时获取其帧大小不正确 ios

渲染视图中的自动布局不会更新其框架

由于纵向尺寸的超视帧,iOS自动布局在横向模式下不正确?

UIView 没有正确定位启用自动布局的故事板