【发布时间】:2015-10-15 10:00:23
【问题描述】:
我听说viewDidLayoutSubviews 是我们使用约束时更改布局的最佳位置。
于是我跳到viewDidLayoutSubviews
我在 SuperView 上创建了三个 UIViews 和 SubViewed。帧计算的代码我就不说了。
[self.view addSubview:imgMiddleCircle];
[self.view addSubview:imgFirstCircle];
[self.view addSubview:imgLastCircle];
使用这块我正在添加这些圈子。
现在,当我在 viewDidLayoutSubviews 中运行我的代码时,我会看到以下屏幕:
当我切换到 viewWillLayoutSubviews 时,我在屏幕上看到了这个:
为什么我在viewDidLayoutSubviews 中获得了额外的两个圈子,即使我创建了三个圈子。
为什么viewWillLayout 给出正确的输出。
【问题讨论】:
-
viewDidLayoutSubviews被多次调用,这就是您看到额外视图的原因。因此,它不是添加子视图的最佳位置。通常,您会在viewDidLoad中添加子视图,如果您确实确定要手动计算帧,请仅在viewDidLayoutSubviews中执行此操作 -
你的意思是在内部多次调用
viewDidLayoutSubviews....而且我不能使用viewDidLoad,因为我打开了自动布局。我正在根据现有控件进行计算。在viewDidLoad中,我没有为现有控件获得正确的框架 -
@RahulMishra 在
viewDidLayoutSubviews中设置框架并在viewDidLoad中添加子视图 -
我正在以编程方式创建这些视图...
标签: ios objective-c autolayout layoutsubviews