【问题标题】:size of UIView object returned as zero under autolayoutUIView 对象的大小在自动布局下返回为零
【发布时间】:2012-12-18 08:53:45
【问题描述】:

我正在使用自动布局在 IOS6 下重新编写一个应用程序,但在访问 UIView 子类的大小时遇到​​问题

@property (weak, nonatomic) IBOutlet MyView *myView1;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    NSLog(@"myView1: %@",self.myView1);
}

UIView 的大小在 StoryBoard 中完全定义,但在我运行代码时显示为零。这是自动布局还是子视图还没有定义?我在这里做错了什么吗?

【问题讨论】:

    标签: uiview ios6 storyboard autolayout


    【解决方案1】:

    刚刚找到了一个可能的答案here。运行方法

    [self.view setNeedsLayout];
    [self.view layoutIfNeeded];
    

    强制计算 UIViews 尺寸,导致预期值出现在日志中,并且 UIView 子类本身也知道。

    【讨论】:

    • [self.myView1 layoutIfNeeded]之后我们可以得到真实的尺寸。
    【解决方案2】:

    我刚刚打印了一个子视图的框架。

    viewDidLoad 中是0

    它在 viewDidLayoutSubviews 回调中有一个非零值。

    viewDidLoad 中,您应该只期望视图控制器的view 的值不为零。在viewDidLoad 内部实际上是有时您添加子视图和东西的地方。因此,期望在您为其设置约束的回调中计算框架是不正确的。

    基本上需要理解的是,首先绘制一个viewController,然后随着它的生命周期事件,它的子视图将被布局

    【讨论】:

      猜你喜欢
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 2014-10-05
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多