我有一些奇怪的行为。
UIStackView *stackView = [UIStackView alloc];
stackView = [stackView initWithArrangedSubviews:@[self.subview1,self.subview2]];
[self addSubview:stackView];
[stackView setTranslatesAutoresizingMaskIntoConstraints:NO]
[self addConstraint:[NSLayoutConstraint constraintWithItem:stackView attribute: NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1.0f constant:0]]
当我使用 XCode 的 Ipad Air 2 模拟器时,此代码运行良好,但是当我实际尝试在 Ipad Air 2 上运行它时,它在尝试添加布局约束(代码的最后一行)时崩溃,抱怨说stackView
是nil
。
单步执行代码后,我实际上发现它stackView
位于nil
第一行之后,即对[UIStackView alloc]
. 这对我来说很奇怪,因为我不知道为什么 alloc 调用会return nil
,更不用说为什么它return nil
只会在实际设备上而不是模拟设备上。
编辑:
我最初的代码如下:
UIStackView * stackView = [[UIStackView alloc] initWithArrangedSubviews:@[self.subview1,self.subview2]];
[self addSubview:stackView];
[stackView setTranslatesAutoresizingMaskIntoConstraints:NO]
[self addConstraint:[NSLayoutConstraint constraintWithItem:stackView attribute: NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1.0f constant:0]]
在这种情况下,stackView
是nil
在组合alloc
/init
调用之后,但我不知道是哪一个成功nil
的。这就是为什么我把电话分开来看看。