【问题标题】:Autolayout subviews residing in separate xib位于单独的 xib 中的自动布局子视图
【发布时间】:2015-03-14 10:21:43
【问题描述】:

除了标题所说的

  1. 主窗口左侧有一个容器视图,称之为mainContainerView(绿色背景)
  2. 在第二个 .xib 中,我有一个 NSTableView 设置 - 称之为 Second.xib(红色背景)
  3. 在 MainViewController.m 中添加 Second.xib 中定义的 NSTableView 并将约束设置如下

[_mainContainerView addConstraint:[NSLayoutConstraint constraintWithItem:_mainContainerView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:self.second.view attribute:NSLayoutAttributeBottom multiplier:1 constant:0]];

正如您在屏幕截图中看到的,当我调整窗口大小时,红色背景不会跟随主容器视图。你知道为什么会这样吗?

编辑 + 解决

为了修复这个错误,我必须为宽度/高度设置约束。我还为超级视图添加了顶部/底部对齐的约束。

【问题讨论】:

  • 你已经设置了一个约束,容器的底部大于或等于表格视图的底部。结果与此一致。如果这不是你想要的,那你为什么要使用不等式?当主窗口变高时,不等式允许表格视图保持较短。
  • 实际上将其设置为 equal 根本不允许窗口增长!即我不能增加高度,只能增加宽度
  • 在包含表格视图的 xib 中,我假设包含表格视图的滚动视图是顶级对象(不是 xib 中任何其他视图的子视图)。如果是这种情况,请在选择滚动视图时查看 Translates Mask Into Constraints 的值。如果已选中,请尝试取消选中它,看看是否有影响。
  • @PaulPatterson 看到我的编辑。你可以看到左下角有一个点,好像大小是0? Edit2:我缺少高度/宽度的约束。

标签: objective-c xcode cocoa autolayout


【解决方案1】:

我更喜欢:

[_mainContainerView addConstraint:[NSLayoutConstraint constraintWithItem:self.second.view attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:_mainContainerView attribute:NSLayoutAttributeBottom multiplier:1.f constant:0.f]];

【讨论】:

  • 看我上面的评论,窗口将保持在相同的高度而不能增加它
  • @hajder 你的意思是要把整个窗口的高度设置为固定的吗?
  • 感谢您的回复,但我现在已通过设置高度限制来修复它。
  • @hajder 酷!自己回答然后标记如何?
  • 谢谢我将您的答案标记为解决方案。此外,@Paul Patterson 还需要关于取消选中将掩码转换为约束的评论。为什么?
猜你喜欢
  • 2017-08-09
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多