【问题标题】:Pinning a NSProgressIndicator to the bottom将 NSProgressIndicator 固定到底部
【发布时间】:2016-03-11 06:42:32
【问题描述】:

简单的问题,但不知何故我无法让它发挥作用。所以我有一个 NSProgressIndicator,我想固定到窗口的底部,但是当我为 NSProgressIndicator 添加底部约束时,指示器不会固定到底部,而是指示器和底部之间的距离随着我慢慢增加增加窗口的大小。

这里有几张图片供参考:

一个新项目的图片,它的 mainmenu.xib 中只有一个进度指示器和一个约束

当视图很小时,约束被保持

但是为什么当我增加窗口大小时约束会改变?

我用按钮和文本字段尝试了同样的事情,它适用于其他两个控件视图,它只不适用于 NSProgressIndicator。

任何想法为什么会发生这种情况以及任何解决方案(甚至解决方法都可以)都会很棒!

【问题讨论】:

  • 当控件周围有红框时,表示约束不完整,无法按预期工作。点击 IB 文档大纲中的红色图标,找出缺少的内容。
  • 刚刚固定左边缘并检查其工作与否
  • 只需将 NSProgressIndicator 赋予前导和尾随约束。

标签: objective-c swift cocoa constraints nsprogressindicator


【解决方案1】:

如果您没有正确约束视图,自动布局将添加自己的约束以确保它得到正确约束。在您的示例中,您可以通过记录属于窗口contentView(进度指示器的超级视图)的约束来查看自动布局添加了什么:

var contentView = window.contentView as! NSView
for constraint in contentView.constraints {
    println(constraint)
}

/*
<NSLayoutConstraint:0x6... V:[NSProgressIndicator:0x6...]-(20)-|   (Names: '|':NSView:0x6... )>
<NSLayoutConstraint:0x6... H:|-(20)-[NSProgressIndicator:0x6...]   (Names: '|':NSView:0x6... )>
<NSIBPrototypingLayoutConstraint:0x6... 'IB auto generated at build time for view with ambiguity' H:|-(20@251)-[NSProgressIndicator:0x6...](LTR) priority:251   (Names: '|':NSView:0x6... )>
<NSIBPrototypingLayoutConstraint:0x6... 'IB auto generated at build time for view with ambiguity' V:|-(322@251)-[NSProgressIndicator:0x6...] priority:251   (Names: '|':NSView:0x6... )>
<NSIBPrototypingLayoutConstraint:0x6... 'IB auto generated at build time for view with ambiguity' H:[NSProgressIndicator:0x6...(96@251)] priority:251>
*/

注意其标识符包含短语IB 自动生成以用于具有歧义的视图的约束 - 这些是 Auto Layout 必须创建的约束以防止歧义布局。特别要注意这些限制中的第二个:

V:|-(322@251)-[NSProgressIndicator:0x6...] priority:251

这就是说,在可能的情况下,确保进度指示器的上边缘始终距离其父视图的上边缘 322 像素(您的程序中的确切值会有所不同 - 它会是出现在 xib 中的两条边之间的距离)。当你垂直放大你的视图时,自动布局会尝试找到一种方法来满足这两个约束,它可以通过调整进度指示器的高度来做到这一点。这很难看到,因为进度指示器没有边框,但在您上一个屏幕截图中,指示器的高度约为 400 像素,而其顶部和底部边缘到相应的超级视图边缘的距离是恒定的。

要获得您需要的行为,您需要防止自动布局使用它在不明确的布局情况下添加的约束。如果你给你的进度指示器一个高度约束,自动布局将不能同时满足两个垂直约束,所以它只会满足具有更高优先级的那个 - 那是你的约束 - 固定底部边缘的那个(1000 vs 251 )。 (当然你也应该完全限制它的水平位置。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 2013-09-25
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多