我不知道为什么我的编程创建约束是不明确的,我甚至尝试从具有相同约束的Nib初始化,它可以工作,但为什么我的代码不是。
@interface rootViewController: UIViewController
@end
@implementation rootViewController
- (void)loadView
{
self.view = [[UIView alloc] init];
UIView *theView = [[UIView alloc] init];
[self.view addSubview:theView];
NSArray *arr = @[
[theView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor],
[theView.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor],
[theView.centerXAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.centerXAnchor],
[theView.leadingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.leadingAnchor]];
[NSLayoutConstraint activateConstraints:arr];
}
@end
//And I load it in the ApplicationDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window = [[UIWindow alloc] init];
self.window.rootViewController = [[rootViewController alloc] init];
[self.window makeKeyAndVisible];
return YES;
}
调试时无法找到问题真的很有趣。
答案 0 :(得分:1)
感谢Yun CHEN的帮助,他告诉了我很多,但真正的问题是。
以编程方式创建的视图与Interface Builder之间存在一些不同之处。
@property(nonatomic) BOOL translatesAutoresizingMaskIntoConstraints;
//the property of UIView
Iet读了解说:
默认情况下,对于以编程方式创建的任何视图,属性设置为YES 。如果在Interface Builder中添加视图,系统会自动将此属性设置为NO。
这就是说,只需将这个隐藏的boss设置为NO即可。一切正常。
答案 1 :(得分:0)
是的,计算宽度时不明确。无法通过Leading
和CenterX
约束来计算。 (高度由顶部和底部约束很好地计算)。所以:
案例1,如果视图的宽度等于其超级视图,则应删除CenterX
约束,并添加Trailing
约束。
案例2,如果视图的宽度是特定值并且视图居中,则应删除Leading
约束,并添加Width
约束。
案例3,如果视图的宽度是特定值且视图左对齐,则应删除CenterX
约束,并添加{{1}约束。