从其他堆栈溢出问题中,我了解到在您的视图控制器中,您可以使用viewDidLoad方法来初始化子视图和viewWillLayoutSubviews方法来设置框架。这意味着我们需要保留视图控制器实例中所有视图的引用(如下所示)。这一切都很好,很好,可以处理设备旋转等。
UILabel* myLabel;
- (void)viewDidLoad
{
myLabel = [[UILabel alloc] init];
[myLabel setText:@"Hello"];
}
- (void)viewWillLayoutSubviews
{
[myLabel setFrame:CGRectMake(0, 0, self.view.frame.size.width, 21)];
}
我的问题是,如果您有一个复杂的子视图层次结构怎么办。例如,如果您有一个 UIView 的子视图,并且您向该 UIView 添加子视图(并且可能更深入),该怎么办。您是否必须保留对整个视图层次结构中每个视图的引用,以便在viewWillLayoutSubviews上修改每个视图的框架?这似乎是唯一的方法。约束是最好的方法,这样您就不必经常修改框架吗?构建大量自定义 UIView 以使管理此层次结构在每个自定义视图中更易于管理和自包含的最佳答案是什么?
希望这是一个足够清楚的问题..在此先感谢。