问题标签 [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 投票
1 回答
8151 浏览

ios - 使用约束以内容视图为中心的子视图

我有一个带有两个子视图的内容视图。我将子视图垂直堆叠并在内容视图中水平居中(x 轴):

现在我想将它们垂直居中(y 轴)。我希望 buttonView 顶部和标签视图底部的空间相等。

我怎样才能做到这一点?具有优先级的顶部和底部约束?

编辑:

斯科特,这是您建议的代码的外观:

buttonView 太高了

我尝试在 buttonView 和 label 之间设置间距,-1-但没有帮助。这就是我需要它的样子:

在此处输入图像描述

这是我用来实现它的代码:

我的约束有效,但是是硬编码的,如果可能的话,我宁愿远离。

0 投票
1 回答
538 浏览

xcode - CGRectMake 恢复到原来的位置?

我使用以下命令将 UIView 从其原始位置移动到我的 XIB/Storyboard 上:-(void)myMovingViewAction{

我遇到的问题是让 UIView 回到我的 Storyboard UIViewController/XIB 上的原始位置。

我知道我可以使用与上面相同的代码,其中包含原始坐标,但是这些坐标在不同的设备上是不同的。在这个例子中,约束让我的 UIView 紧贴我的 UIViewController 底部的原始位置。

有没有办法可以将此视图发送回“默认”位置?

提前致谢!:)

0 投票
1 回答
694 浏览

ios6 - 使用 Autolayout 为 IB 中创建的视图设置动画

我有很多在代码上创建的标签和按钮的视图,因为在 IB 中太复杂了。这工作正常。

在 IB 中,我还创建了一个输入视图,我希望通过点击按钮从底部显示该视图。如果你愿意的话,非常像键盘。因为这个输入视图是向前的,所以它是在 IB 上创建的,它包含滑块、标签等。我没有将它添加为 IB 上 self.view 的子视图。

通过点击按钮,我为输入视图设置了所有约束:我设置了宽度,我将它设置在 self.view 的底部,垂直大小,然后我删除了这个约束,我添加了实际的高度和然后我用 [self.view layoutIfNeeded] 制作动画。

问题是输入视图 itsef 动画正确,但它的子视图没有那么多。它们有点像一下子出现。

我尝试以编程方式添加一个输入视图,只有一个开关。它的动画效果非常好。

我猜测控件与其superView之间的约束存在问题。但我不确定,因为虽然它们的动画效果不正确,但它们位于正确的位置并且比例正确。我想我在这里遗漏了一些东西。也许混合 IB 集控件和视图并以编程方式修改它们不是一个好主意?

有人有这方面的经验吗?

提前致谢,

0 投票
1 回答
1507 浏览

iphone - 苹果会在自动布局警告中拒绝我的应用程序吗?

我制作了针对 iOS 6 的 iPhone 应用

我的应用程序运行非常顺利,在启动期间和应用程序的任何地方都没有崩溃。但我的应用程序显示了一些与autolayout.

我尝试了很多来解决这个警告,但我没有成功..

NSLog 中的警告:

由于这个警告,如果我将它提交到 App Store,我的应用会被拒绝吗?

0 投票
2 回答
370 浏览

iphone - 具有单个约束的自动布局约束错误

我有一堆标签和按钮的场景。当您点击一个按钮时,视图会从底部向上滑动,其中包含控件,可以说是一种键盘。它“看起来”是这样的:

这个“键盘”是在视图加载和动画完成将其高度从 0 切换到其固有内容大小时在最开始时创建的。这个场景只支持横向模式,当设备旋转 180 度时,我花了很长时间才将“键盘”保持在视图上。

我看到的问题会出现以下两种情况之一:

  1. 设备旋转 180 度。
  2. 调用“键盘”。

这个问题如下:

错误日志给了我两次这个错误,每组按钮滑块一次。

我认为奇怪的是冲突的约束完全相同。我以为我犯了一些复制粘贴错误并两次添加了相同的约束,但事实并非如此。

我猜这与旋转时调用 updateViewConstraints 以及我执行动画时有关,但我不明白为什么只有这些约束受到影响,因为在这个“键盘”视图中还有一些约束。

总而言之,这个自动布局比苹果声称的要困难得多。在我看来,当然。

有任何想法吗?

编辑:约束全部设置在代码中,主要使用视觉语言格式。我相信,“键盘”内控件的约束被添加到“键盘”视图中,这是正常的做法。

只是为了尝试一下,我更改了有问题的约束,而不是将它们添加到“键盘”子视图中,而是将它们添加到 self.view(“键盘”超级视图)中。突然之间,不再显示错误。

尽管如此,我真的很想就此事进行一些讨论,因为我仍然不知道出了什么问题,而且我只是碰巧碰巧了。我真的很想理解它。

0 投票
1 回答
2249 浏览

ios - 添加带有简单动画的子视图时使用 NSLayoutConstraints

我正在尝试向我的菜单项(messageViewMenu)添加一个视图(messageView),以便当点击菜单项时,这个新视图会添加到它的正上方,并且它们都一个接一个地向下滑动屏幕 - Evernote 5.1 .2 有类似的东西。

我正在使用 NSLayoutConstraint 将新视图附加到我认为是菜单项的顶部。然后,我将菜单项的现有垂直约束设置为标题 UIView (_headerMessageConstraint) 以增长到 300 大小。我希望新视图的后缘垂直附加到菜单项的前缘,并且它们在屏幕上向下滑动一起。

但是,新视图会随着菜单项向下滑动,然后在其后面继续滑动,直到看起来顶部边缘对齐。

谁能告诉我哪里出错了?在此先感谢您的帮助

史蒂夫

编辑。自从我发布这篇文章以来,我了解到当我添加新视图(MessageViewController 的 mvc.view)时,它默认放置在 0,0。我不希望它在 0,0,所以似乎我必须在我希望它出现的位置为它设置一个框架 - 使用自动布局时这似乎是错误的 - 或者将此新视图添加到子视图并为子视图的高度设置动画,也许......虽然我可能会在这里谈论自己进入一个黑暗的地方。

0 投票
1 回答
3419 浏览

ios - 使用 NSLayoutConstraints 移动 UIView 所需的建议

从下面的图片中,当用户点击 view1 时,我让 view2 和 view3 向下滑动到页脚,通过将 view3 的约束常量与页脚设置为 0(ish)来有效地拉动。我的 xib 设置了约束,如第一张图片所示。其中最重要的 2 个 [对我来说现在] 是 view1View2 约束和 view3Footer 约束

带有约束和视图的 xib

为了实现向下滑动,我最终为 view1view2 约束设置了低优先级,为 view3Footer 约束设置了更高的优先级,然后在 animateWithDuration 中更新 view3Footer 约束常量

成功滑下

我的问题是让 view2 和 view3 向后滑动,如果我使用相同的方法,我可以通过将 view1view2 约束常量设置为 2 来实现。

我相信上面上滑的问题是 view3Footer 约束比 view1View2 约束具有更高的优先级,优先级似乎只是只读的,所以我不能专门更改这些。我知道在设置约束时我只要求视图定位。

...我相信我可能完全使用了错误的方法...

我是否以正确的方式解决这个问题?我是否必须获取约束对象 IBOutlet 并重写它们?如果是这样,我会重写优先级吗?我是否应该将 >= 用于具有相同优先级的常量,这似乎不起作用。下面是我的简单动画代码,虽然不多,但除了手势识别器之外,设置主要在 xib

很感谢任何形式的帮助。谢谢,史蒂夫

对于向下滑动:

UPDATE 也试过这个设置优先级相等——不能再实现向下滑动

对于上滑:

0 投票
1 回答
781 浏览

ios - 自动布局约束

我需要一个视图在纵向模式下垂直居中并在横向模式下向右移动(比如 150 像素)。

我尝试设置一些约束,但似乎无法确定:

这适用于横向模式,但不适用于纵向。在纵向中,左侧约束 (570@700) 失败,然后左侧约束可以成功 (257@800) 并且中心 X 永远不会实现。我需要第一组(570@700 和 257@800)都失败,以便它可以诉诸中心 X 约束。

还是我应该放弃 centerX 约束?

0 投票
1 回答
627 浏览

uiview - UIView 子视图自动调整大小

我写了一个小的 UIView 子类来显示进度 HUD。HUD 视图效果很好,但在最后几天我遇到了一个小问题。

在我的应用程序中,我以自定义方式呈现 UIViewController。当用户在 tableView 中选择一行时,我正在创建第二个 viewController 的实例,将其移动到当前 VC,将其视图高度设置为零,将其添加为当前 VC 视图的子视图(在所选位置单元格)并将高度设置为原始高度。

这种行为看起来很酷,效果很好。

但是当第二个视图被添加为子视图时,我在这个视图中添加了一个 HUD。当第二个视图调整到原始高度时,HUD 会粘在视图的顶部并且只有几个像素高: 在此处输入图像描述

我玩了一下 NSLayoutConstraints ......但我直到现在才开始工作......

有人对此有一个好主意吗?或者是否有人知道关于这些限制的良好且解释清楚的资源?

HUD 实际上是一个以小窗口为子视图的背景视图。所有其他元素(进度视图、标签等)都是小窗口的子视图。

0 投票
1 回答
2571 浏览

ios - 如何为 setFrame 设置动画:在 Objective-C 中使用自动布局

我正在开发一个 iOS (6) 应用程序,我有一个视图,我改变了它的大小(动画),并且在那个视图中是一个 UILabel,我想随着视图一起增长,但不成比例。

即我需要视图占据,如果视图是特定大小的,比如说 90% 的视图,但是当我把它变大(到另一个特定大小)时,我只希望它占据,比如 80%。这是为了容纳 UILabel 周围的其他子视图,这些子视图将在超级视图增长时变得可见。

我已经尝试使用 NSLayoutContraints ,并将前导空间设置为它需要的空间,以及设置 UILabel 的宽度以使其适当增长,我还尝试设置前导和尾随空格(如然后宽度会自动增长)。

奇怪的是,我在同一个动画代码块中(使用 UIView animateWithDuration:...)有其他子视图,它们的 NSLayoutContraints 我正在玩,它们都可以工作。然而,所有这些都是间距限制,而不是大小限制,并且没有涉及 UILabel,所以我不知道这是否与它有关......

然后我尝试设置 UILabel 的 translatesAutoresizingMaskIntoConstraints = YES,并且只在标签上使用 setFrame:,虽然这将标签的大小和位置设置在我想要的位置,但更改没有动画,所以看起来很可怕......

有没有其他人有过这样的经历或任何想法来帮助我?

谢谢

以下是我一直在尝试的一些代码,其中“left”是标签的前导空间约束,“width”是标签的宽度约束。

setFrame 方法在父视图控制器的动画代码块中调用。