我正在尝试将通过xib文件创建的视图添加到UIScrollview中。
View看起来像这样:
我得到的是:
我用来将视图添加到UIScrollview(在Storyboard中设置)的代码是:
初始化代码:
NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"SpuelungProtokollView" owner:self options:nil];
HPSpuelungProtokollView * spuelungProtokollView = [subviewArray objectAtIndex:0];
HPSpuelung * vInfo = pInfo;
// setup Infos
// ... this part is not related to the problem ...
[self setContentView:spuelungProtokollView];
然后我在viewDidLoad:
中执行以下操作:
[[self scrollView] setContentSize:[[self contentView] frame].size];
[[self scrollView] addSubview:[self contentView]];
[[self contentView] layoutIfNeeded];
有没有人遇到类似的问题 - 知道如何正确地向UIScrollview添加(正确约束)UIView?
先谢谢你的答案!
修改
奇怪的副作用是:如果我在viewDidAppear:
答案 0 :(得分:1)
您应该实现awakeFromNib:
来初始化视图。如果你不是,那么可能没有正确设置。
NSNibAwaking协议参考:这个非正式协议包含一个 单一方法,awakeFromNib。类可以实现此方法 从对象加载对象后初始化状态信息 Interface Builder存档(nib文件)。
所以,我认为你想要的东西如下:
- (void)awakeFromNib {
[[self scrollView] setContentSize:[[self contentView] frame].size];
[[self scrollView] addSubview:[self contentView]];
[[self contentView] layoutIfNeeded];
return;
}
awakeFromNib
实际上是特别的,因为它是NSNibAwaking 非正式 协议的一部分(基本上意味着您的对象不必遵守它)。当从一个nib文件(.xib)加载一个对象时,只要它实现了awakeFromNib方法,就会在连接所有出口后发送此消息。
答案 1 :(得分:1)
我已经能够解决问题了 - 我必须在initWithCoder:
中设置自定义视图的自动调整掩码:
- (id) initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
[self setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
}
return self;
}
希望这有助于其他人......