我确信这一定是个常见问题。我有一个UIViewController,它有一个UINavigation栏和一个ContentView(包含UIView和一堆子控件。用户可以通过向左滑动隐藏这个内容视图,然后它会动画离开屏幕的左侧。我想要导航bar可以扩展并填充整个宽度。您不能将这两个链接到Interface Builder,因此必须在代码中完成。没问题:
// Called from viewWillAppear
-(void)addLayoutConstraints{
UINavigationBar *navigationBar = self.navigationBar;
UIView *facetView = self.facetViewController.view;
NSDictionary *views = NSDictionaryOfVariableBindings(navigationBar, facetView);
NSArray* constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-[facetView]-[navigationBar]-|"
options:NSLayoutFormatAlignAllBaseline
metrics:nil
views:views];
[self.view addConstraints:constraints];
}
该代码剪断应该做得很好。问题是我已经在IB中布置了UINavigationBar,这样我就可以轻松地为它添加自定义按钮并查看它等等...问题是当我在IB中布置导航栏时,IB添加了一堆无法删除的默认约束。其中一个与我在上面的代码中添加的一个冲突。
你如何解决这个问题?以下是我提出的3种可能性:
1。)我也可以通过编程方式创建UINavigation栏。这样它只有我添加的约束。我不希望这样做,但这是一个选择
2。)使用IB,以某种方式删除默认约束,以便它们不会发生碰撞。我没有办法做到这一点
3.。)在代码中,删除IB添加到UINavigation栏的默认约束,然后添加我的自定义约束。我确实看到有removeConstraint和removeConstraints。我想我可以检索约束,删除它们,然后添加我自己的约束。再一次,有点长时间凌乱的过程。
你有什么看法?你做过类似的事吗?答案 0 :(得分:0)
选项3是所谓的方式。在WWDC 2012会议中正好讨论了这个问题 - Introduction to Auto Layout for iOS and OS X。