2

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

视图看起来像这样: 在 Interface Builder 中查看设置

我得到的是: 在代码中添加到 UIScrollview 的视图

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

有没有人遇到过类似的问题 - 知道如何正确地将(正确约束)UIView 添加到 UIScrollview?

提前感谢您的回答!

编辑

一个奇怪的副作用是:如果我把创建层次结构的视图放在其中,则视图会正确加载viewDidAppear:

4

2 回答 2

1

您应该实施awakeFromNib:以初始化视图。如果你不是,那么它可能没有正确设置。

NSNibAwaking 协议参考:这个非正式协议包含一个方法,awakeFromNib。在从 Interface Builder 存档(nib 文件)加载对象后,类可以实现此方法来初始化状态信息。

所以,我想你会想要你的 impl 类似下面的东西:

- (void)awakeFromNib {
    [[self scrollView] setContentSize:[[self contentView] frame].size];
    [[self scrollView] addSubview:[self contentView]];
    [[self contentView] layoutIfNeeded];
    return;
}

awakeFromNib实际上它的特殊之处在于它是 NSNibAwaking非正式协议的一部分(基本上意味着您的对象不必遵守它)。当从 nib 文件 (.xib) 加载对象时会发生这种情况,只要它实现了 awakeFromNib 方法,就会在所有出口连接后发送此消息。

于 2013-01-14T14:20:11.970 回答
1

我已经能够解决问题 - 我必须initWithCoder:像这样设置自定义视图的自动调整掩码:

- (id) initWithCoder:(NSCoder *)aDecoder {
    if (self = [super initWithCoder:aDecoder]) {
        [self setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
    }

    return self;
}

希望这对其他人有帮助....

于 2013-01-14T15:46:07.800 回答