viewWillAppear上标签的大小不正确

Vic*_*nin 2 xib ios ios6

我有以下设置

  • 只有横向视图的XIB文件.此视图是与我的控制器的连接
  • 此视图上有一个连接到的标签 IBOutlet UILabel* label
  • 此标签配置如下(它占据整个屏幕宽度). 在此输入图像描述
  • 我重写了viewWillAppear并执行此操作(以获取标签的大小).
-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    CGRect rect = _labelTitleLand.frame;
}
Run Code Online (Sandbox Code Playgroud)

奇怪的事情(我不明白).它以纵向(在iPad上)启动时返回size =(宽度768,高度21),这是正确的.

它在横向启动时返回size =(宽度741高度21).这很奇怪.我预计它将返回宽度1024,高度为21的景观.

我的印象是,在viewWillAppear的那一刻,所有控件尺寸都已经计算好了.

更新1

如果我在viewDidAppear上检查labelTitleLand.frame,那么它会返回正确的结果.但是,我不喜欢这个,因为我想做一些影响视图绘制的动作(基于这个大小).在这种情况下,如果我将在viewDidAppear上执行此操作,据我所知,将会有可见的重绘.

Fir*_*eer 8

在获得实际的最终帧之前,必须完成视图层次结构的布局.

因此,您应该检查框架viewDidLayoutSubviews,该框架仍将在实际绘制视图层次结构之前.如果您需要在此处进行更改,则可以不进行任何重绘.

viewWillAppear 太早了,因为这是在您的自动调整遮罩(和/或自动布局约束)产生影响之前.