首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将NSProgressIndicator固定在底部

将NSProgressIndicator固定在底部
EN

Stack Overflow用户
提问于 2016-03-11 06:42:32
回答 1查看 179关注 0票数 0

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

以下是几张供参考的图片:

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

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

但是为什么约束随着我增加窗口的大小而改变呢?

我尝试过用一个按钮和一个文本字段做同样的事情,它适用于另外两个控件视图,它只对NSProgressIndicator不起作用。

任何想法,为什么会发生这种情况,任何解决方案(甚至解决办法都会很好)将是伟大的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-11 11:07:30

如果没有对视图进行适当的约束,自动布局将添加自己的约束,以确保其受到适当的约束。在您的示例中,您可以通过记录属于窗口的contentView (进度指示器的superview)的约束来查看自动布局:

代码语言:javascript
复制
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自动生成的约束--这些约束是自动布局为防止模糊布局而必须创建的约束。特别要注意这些限制中的第二个:

代码语言:javascript
复制
V:|-(322@251)-[NSProgressIndicator:0x6...] priority:251

这意味着,在可能的情况下,确保进度指示器的顶部边缘总是322像素与其superview的顶部边缘(您的程序中的确切值将是不同的-它将是两个边缘之间的距离,因为它们出现在您的xib中)。当您垂直放大您的视图,自动布局将试图找到一种方式来遵守这两个限制,它可以通过调整进度指示器的高度。这是很难看到的,因为进度指示器没有边框,但是在最后一张屏幕截图中,指示器的高度大约是400像素,而它的顶部和底部边缘到相应的superview边缘的距离是恒定的。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35933847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档