问题标签 [nslayoutconstraint]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1925 浏览

ios - NSLayoutConstraint 用于 UILabel “增长”额外的行

我有一个UILabel,我想设置它,使它有一个固定的宽度和可变的高度,取决于它text而不是它的superView.

即如果text是“Hello World”。那么标签将是......

如果text是“这是一些非常长的文本,跨越了几行”。然后标签将是...

我已经使用 an 设置了固定宽度,NSLayoutConstraint并且设置numberOfLines为 0,但它只保留一个行高并用省略号连接文本。

我知道有一种叫做“contentResistance”的东西,但我不确定它的名称或如何使用它。

这可能吗?

0 投票
6 回答
25895 浏览

ios - 使用约束以编程方式构建 titleView(或通常使用约束构建视图)

我正在尝试构建一个带有如下约束的titleView:

标题视图

我知道如何使用框架来做到这一点。我会计算文本的宽度、图像的宽度,创建一个具有该宽度/高度的视图以包含两者,然后将两者作为子视图添加到带有框架的适当位置。

我试图了解如何在约束条件下做到这一点。我的想法是内在的内容大小会在这里帮助我,但我正在疯狂地试图让它发挥作用。

我不应该硬编码titleView的大小。它应该能够通过其内容的大小来确定,但是......

  1. 除非我硬编码一个框架,否则 titleView 确定它的大小为 0。
  2. 如果我设置translatesAutoresizingMaskIntoConstraints = NO应用程序崩溃并出现此错误:'Auto Layout still required after executing -layoutSubviews. UINavigationBar's implementation of -layoutSubviews needs to call super.'

更新

我让它与这段代码一起工作,但我仍然必须在 titleView 上设置框架:

0 投票
1 回答
95 浏览

iphone - 在代码和 IB 之间组织 NSLayoutContraints

我相信这一定是一个普遍的问题。我有一个 UIViewController,它有一个 UINavigation 栏和一个 ContentView(它包含 UIView 和一堆子控件。用户可以通过向左滑动来隐藏这个内容视图,然后它会在屏幕左侧显示动画。我想要导航bar 展开并填充整个宽度。不能将这两个与 Interface Builder 链接,所以必须在代码中完成。没问题:

被剪断的代码应该做得很好。问题是我在IB中布局了UINavigationBar,这样我就可以很方便的给它添加自定义按钮并看到它等等...问题是当我在IB中布局导航栏时,IB添加了一堆无法删除的默认约束。其中之一与我在上面代码中添加的冲突。

你如何解决这个问题?以下是我提出的 3 种可能性:

1.) 我也可以通过编程方式创建 UINavigation 栏。这样,它只有我添加到它的约束。我不想这样做,但这是一个选择

2.) 使用 IB,以某种方式删除默认约束,以免它们发生冲突。我没有办法做到这一点

3.) 在代码中,删除 IB 添加到 UINavigation 栏的默认约束,然后添加我的自定义约束。我确实看到有 removeConstraint 和 removeConstraints。我想我可以检索约束,删除它们,然后添加我自己的。再一次,有点漫长的混乱过程。

你有什么意见?你做过类似的吗?

0 投票
1 回答
2071 浏览

objective-c - 自动布局约束抛出异常

我正在加载到表格视图单元格中的字段上使用自动布局。对于每个单元格,我从 contentView 中清除所有子视图,并根据我需要的字段类型加载我自己的视图。大多数细胞都很好,但是当这个细胞出现时,我得到了一个例外。

这是单元格的代码:

在这种情况下, 中只有一项self.field.answers。字体与下面使用的值相同。

这是单元格高度的代码:

下面是创建 ToggleButton 内部的代码,它是一个 UIButton:

这是我得到的异常读数:

我不明白为什么我会得到例外,因为所有的高度都加起来了。这种情况发生在其他一些细胞类型上,因此任何见解都会有所帮助。

0 投票
1 回答
1928 浏览

ios - 在 Interface Builder 中设置 2 个视图之间的固定空间

我正在尝试学习在界面生成器中使用布局约束,但我遇到了一个问题......

我有两个视图,一个 UILabel 和一个 UIImageView,我想要一个如下布局:

  1. 标签应该在superview中居中
  2. 图像视图应该是标签左侧的设定距离

看起来很简单,但我不知道如何对第二个条件施加约束(第一个是自动完成的)。有人知道怎么做吗?

谢谢!

0 投票
2 回答
85 浏览

uiscrollview - 删除 IB 中的自动约束

我在界面生成器中为 UIScrollView 创建内容,uiview 在 uiscrollview 内,它具有以下属性:

  • 顶部到superview
  • 底部到superview
  • 留给superview
  • 宽度:1536

但是由于某种原因,我无法删除自动约束“右:-768”,我可以理解为什么它认为应该添加这个,但是,我已经将该视图的左侧设置为约束到左侧的超级视图并将其设置为绝对宽度. 当然我应该可以删除它?

它给了我一个烦人的错误,所以当我尝试滚动视图时,添加了 -768,使滚动视图的第二页不可见,而是使幽灵“第三页”可见。

0 投票
2 回答
611 浏览

objective-c - NSLayoutConstraints 冲突

我正在尝试以编程方式将按钮添加到已经在视图中的 NSTextField 下方的视图中。该视图是在 IB 中创建的并使用约束。它是一个 NSTableCellView,但我怀疑在这种情况下会有什么不同。我的代码是这样的:

如果我将 addConstraint 调出,按钮就会毫无怨言地添加(只是不在正确的位置)。通过 addConstraint 调用,我在调试控制台上收到很多关于约束冲突的消息,并且我的一些 IB 创建的约束被破坏。

显然我做错了什么。我希望约束要求新按钮的顶部比前一个视图或按钮的底部低 2 px。看起来这应该不会引起任何冲突,那么我在哪里呢?

0 投票
1 回答
135 浏览

objective-c - 保留 NSLayoutConstraints 的常量

在 Pre-NSLayoutConstraint 时代,这是可能的NSWindow
保留 NSWindow 大小和状态 - 寻找一种优雅的方式来做到这一点

有没有办法NSLayoutConstraint.constant在应用程序退出时保存 s,并在启动时再次恢复它们?

0 投票
4 回答
75860 浏览

ios - 以编程方式设置约束

我正在尝试如何使用 UIScrollView。经过一番折腾,我终于掌握了窍门。但现在我似乎遇到了另一个障碍。

在这个简单的应用程序中,我有一个滚动视图,为了让它工作,我必须将视图的底部空间设置为滚动视图约束为 0,如此处所述它工作正常。我是通过IB做的。

现在我遇到了一个场景,我必须以编程方式完成那部分。我在viewDidLoad方法中添加了以下代码。

但这似乎不起作用。它在控制台窗口中输出以下消息,我不知道该怎么做。

无法同时满足约束。以下列表中的至少一个约束可能是您不想要的。试试这个:(1)查看每个约束并尝试找出您不期望的;(2) 找到添加了一个或多个不需要的约束的代码并修复它。(注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档)(“”,“”)

有人可以告诉我该怎么做吗?我还在此处附加了一个演示项目,以便您对这个问题有更好的了解。

更新:

首先感谢您的回复。使用答案中提到的方法,我能够让它工作。然而,在稍微不同的情况下,它不是。现在我正在尝试以编程方式将视图加载到视图控制器上。

如果我可以进一步解释。有 2 个视图控制器。第一个是 a UITableViewController,第二个是 a UIViewController。里面那个UIScrollView. 还有多个UIViews 并且其中一些视图的高度超过了屏幕的正常高度。

显示UITableViewController选项列表。根据用户的选择,一个特定UIView的批次将被加载UIViewControllerUIScrollView.

在这种情况下,上述方法不起作用。滚动没有发生。由于我要单独加载视图,我是否必须做一些不同的事情?

我在这里上传了一个演示项目,以便您可以看到它的实际效果。请查看并从表格视图列表中Email.xib选择电子邮件。

0 投票
1 回答
2500 浏览

cocoa - NSView 中的自动布局 NSImageView - 缩放大小。以编程方式设置 NSLayoutConstraint

我在 IB 中设置的 NSView 中有一个 NSImageView。NSImageView 的大小与 NSView 完全相同。

一切正常,调整窗口大小时 NSImageView 的大小与 NSView 相同。

但是,现在我已经向 NSImageView 添加了一个动画(从 A 移动到 B),这会弄乱在 IB 中设置的约束。所以我必须以编程方式执行此操作。

如何以编程方式设置 NSLayoutConstraint 以使我的 NSImageView 具有与我的 NSImageView (超级视图)相同的大小?

更新:

只是为了给你们一些更多的信息。我的应用程序使用拆分视图(三个视图),而不是在 IB 中添加 NSImageView,我现在以编程方式添加它。我将我的新视图(应可扩展到它的父视图)添加到拆分视图中的第三个视图。

您认为拆分视图会导致这些问题吗?

更新 2:

好的,我更接近解决这个问题。我从视图中删除了 NSImageView,并添加了一个 NSView。NSView 缩放得很好,但是一旦我添加了 NSImageView 它就停止工作,因为调整窗口大小后 NSImageView 不会缩放。

换句话说,问题出在 NSImageView 本身。调整窗口大小后它不会缩放...

解决了

我通过使用 PDF 视图而不是图像视图解决了这个问题(这是我想展示的 PDF)。我在 PDF 视图上将 autoScales 属性设置为 YES。