我相信这一定是一个普遍的问题。我有一个 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。我想我可以检索约束,删除它们,然后添加我自己的。再一次,有点漫长的混乱过程。
你有什么意见?你做过类似的吗?