将从xib加载的View添加到UIScrollview中

时间:2013-01-14 14:10:13

标签: ios uiscrollview xib

我正在尝试将通过xib文件创建的视图添加到UIScrollview中。

View看起来像这样: View setup in Interface Builder

我得到的是: The View added to a UIScrollview in code

我用来将视图添加到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:

中创建视图Hirarchy,则视图会正确加载

2 个答案:

答案 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;
}

希望这有助于其他人......