gpt4 book ai didi

ios - UIView:layoutSubviews 与 initWithFrame

转载 作者:可可西里 更新时间:2023-11-01 03:25:56 24 4
gpt4 key购买 nike

当继承 UIView 时,我通常将所有初始化和布局代码放在它的 init 方法中。但我被告知布局代码应该通过覆盖 layoutSuviews 来完成。有一个 post在 SO 上解释了何时调用每个方法,但我想知道如何在实践中使用它们。

我目前将我所有的代码都放在 init 方法中,如下所示:

MyLongView.m

- (id)initWithHorizontalPlates:(int)theNumberOfPlates
{
self = [super initWithFrame:CGRectMake(0, 0, 768, 1024)];

if (self) {
// Initialization code
_numberOfPlates = theNumberOfPlates;

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.frame];
[scrollView setContentSize:CGSizeMake(self.bounds.size.width* _numberOfPlates, self.bounds.size.height)];
[self addSubview:scrollView];

for(int i = 0; i < _numberOfPlates; i++){
UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"a1greatnorth_normal_%d.jpg", i+1]];
UIImageView *plateImage = [[UIImageView alloc] initWithImage:img];
[scrollView addSubview:plateImage];
plateImage.center = CGPointMake((plateImage.bounds.size.width/2) + plateImage.bounds.size.width*i, plateImage.bounds.size.height/2);
}

}
return self;
}

这是通常的任务:设置 View 的框架、初始化 ivar、设置 ScrollView 、初始化 UIImage、将它们放入 UIImageView 中、进行布局。

我的问题是:哪些应该在init中完成,哪些应该在layoutSubviews中完成?

最佳答案

您的 init 应该使用所需的数据创建所有对象。理想情况下,您在 init 中传递给它们的任何帧都应该是它们的起始位置。

然后,在 layoutSubviews: 中,您更改所有元素的框架以将它们放置在应有的位置。在 layoutSubviews: 中不应进行分配或初始化,只能更改其位置、大小等...

关于ios - UIView:layoutSubviews 与 initWithFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13177251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com