Questions tagged «autolayout»

自动布局是针对OS X和iOS的基于约束的描述性用户界面布局系统。

4
如何捕获UIViewAlertForUnsatisfiableConstraints?
我在调试器日志中看到一个错误: Will attempt to recover by breaking constraint <NSLayoutConstraint:0x191f0920 H:[MPKnockoutButton:0x17a876b0]-(34)-[MPDetailSlider:0x17a8bc50](LTR)> Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 我该如何接听电话?它没有出现在我的代码中的任何地方。

2
setNeedsLayout与setNeedsUpdateConstraints和layoutIfNeeded与updateConstraintsIfNeeded
我知道自动布局链基本上包含3个不同的过程。 更新约束 布局视图(这是我们计算框架的位置) 显示 对我来说,还不完全清楚-setNeedsLayout和之间的内在区别-setNeedsUpdateConstraints。从Apple Docs: setNeedsLayout 若要调整视图的子视图的布局,请在应用程序的主线程上调用此方法。此方法记录请求并立即返回。因为此方法不会强制立即更新,而是等待下一个更新周期,所以您可以使用它在更新任何这些视图之前使多个视图的布局无效。此行为使您可以将所有布局更新合并到一个更新周期,这通常可以提高性能。 setNeedsUpdateConstraints 当自定义视图的属性以影响约束的方式更改时,您可以调用此方法以指示在将来的某个时刻需要更新约束。然后,系统将调用updateConstraints作为其常规布局传递的一部分。在需要约束之前立即全部更新约束,以确保在布局遍之间两次对视图进行多次更改时,您不必不必要地重新计算约束。 当我想在修改约束后为视图添加动画并为更改添加动画时,通常会调用例如: [UIView animateWithDuration:1.0f delay:0.0f usingSpringWithDamping:0.5f initialSpringVelocity:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{ [self.modifConstrView setNeedsUpdateConstraints]; [self.modifConstrView layoutIfNeeded]; } completion:NULL]; 我发现,如果我使用-setNeedsLayout的,而不是-setNeedsUpdateConstraints一切都按预期方式工作,但如果我改变-layoutIfNeeded用-updateConstraintsIfNeeded,动画将不会发生。 我试图做出自己的结论: -updateConstraintsIfNeeded 仅更新约束,但不强制布局进入流程,因此仍保留原始帧 -setNeedsLayout调用也-updateContraints方法 那么什么时候可以使用一个代替另一个呢?关于布局方法,是否需要在约束发生变化的视图或父视图上调用它们?

16
UICollectionView自动调整大小的单元格
我正在尝试UICollectionViewCells使用“自动版式” 调整大小,但似乎无法使单元格自行调整大小以适应内容。我无法理解如何从单元的contentView内部内容更新单元的大小。 这是我尝试过的设置: 在其contentView中UICollectionViewCell使用进行自定义UITextView。 滚动到UITextView禁用。 contentView的水平约束为:“ H:| [_textView(320)]”,即,UITextView以固定的宽度320固定在单元格的左侧。 contentView的垂直约束为:“ V:| -0-[_ textView]”,即UITextView固定在单元格顶部。 的UITextView高度限制设置为一个常量,UITextView报告将适合文本。 单元格背景设置为红色,UITextView背景设置为蓝色的外观如下: 我把我已经在GitHub上玩的项目在这里。

12
自动布局-UIButton的固有大小不包括标题插图
如果我有一个使用自动布局排列的UIButton,它的大小会很好地调整以适合其内容。 如果我将图像设置为button.image,则内在大小似乎再次说明了这一点。 但是,如果我调整titleEdgeInsets按钮的,则布局不会解决此问题,而是会截断按钮标题。 如何确保按钮的固有宽度能说明插图? 编辑: 我正在使用以下内容: [self.backButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)]; 目的是在图像和文本之间添加一些分隔。

8
iOS:自动版式中的多行UILabel
我在尝试通过自动版式实现一些非常基本的版式行为时遇到了麻烦。我的视图控制器在IB中如下所示: 顶部标签是标题标签,我不知道它将是多少行。我需要标题标签来显示所有文本行。我还需要在标题的正下方布置其他两个标签和小图像,无论它高高多少。我在标签和小图像之间设置了垂直间距约束,在标题标签和其超级视图之间设置了顶部间距约束,在小图像和其超级视图之间设置了底部间距约束。白色的UIView没有高度限制,因此应垂直拉伸以包含其子视图。我已将标题标签的行数设置为0。 如何获得标题标签以调整大小以适合字符串所需的行数?我的理解是因为使用自动布局,所以不能使用setFrame方法。而且我必须使用“自动布局”,因为我需要其他视图保持在标题标签下方(因此受约束)。 我怎样才能做到这一点?

18
如何使用自动布局在UIScrollview上设置约束?
我花了两天的时间来尝试各种混合和纯自动布局方法的解决方案,以实现在自动布局之前的简单滚动视图设置,现在已经正式宣布了-我一定太愚蠢了。我主要是在Storyboard中进行设置(嗯,就是这样)。 因此,这是我寻求帮助的请求。 视图树: UIView -UIView -UIView ..-UIScrollview ...-UIButton ...-UIButton ...-UIButton 这些按钮应该水平滚动(从左到右,反之亦然)。有人可以请让我知道如何设置的约束来实现这个使用纯自动布局??? - 我尝试过混合方法,如下所示: UIView - UIView - UIView ..-UIScrollview ...-UIView (contentview) ....-UIButton ....-UIButton ....-UIButton ......对于与设置固定宽度和高度的限制contentview以及translatesAutoresizingMaskIntoConstraints按照苹果公司的技术说明设定。使用约束设置按钮和滚动视图。这会使scrollview滚动(是),但是可惜,它滚动得太远了!据我所知,滚动宽度以某种方式比我在contentview中设置的宽度翻了一番。 无论contentview有无,我都尝试了纯自动布局方法。除了以外,所有的观点都是。这些按钮具有固定的宽度/高度约束,并固定到滚动视图的所有四个边缘。没有滚动。translatesAutoresizingMaskIntoConstraints=NOself.view 所以我很困惑为什么我无法使其正常工作。非常感谢您的帮助,如果您需要其他信息,请询问! 带有解决方案 -buttonZ约束的更新屏幕截图: 编辑@ Jamie Forrest 因此,解决方案原来是对最后一个按钮的错误尾随约束。我设置的值为负值-6441,而不是6441。棘手的是,在情节提要中设置值时,“固定”工具栏中有两个选项: 当前画布值是负的(导致没有滚动),下面的选项是正的(激活滚动)。这意味着我并不傻,但我猜至少是半盲。尽管,以我的辩护,XCode不会为“不正确”设置显示错误,是否有点令人不安? 再次编辑 现在,这很有趣...将尾随值从-6441(无滚动)更改为启用了6441的滚动。但是我的老朋友“ contentsize太大”又回来了,导致内容大小是应该的两倍!获得正确内容滚动的解决方案是将尾随约束设置为零!当在Storyboard中工作时,这并不明显,但查看@Infinity James的代码,它应该是这样。

4
NSInvalidUnarchiveOperationException:无法实例化名为NSLayoutConstraint的类
我对此很陌生。我逐步遵循了Apple为iPhone项目“ HelloWorld”编写的教程。我在iPhone 5.0模拟器中运行了它,然后它崩溃了: 2012-11-02 14:46:06.782 HelloWorld [9880:c07] *由于未捕获的异常'NSInvalidUnarchiveOperationException'而终止应用程序,原因:'无法实例化名为NSLayoutConstraint的类'*第一个调用堆栈:(0x14a2052 0xea2d0a 0x144aa78 0x144a9e9 0x32f7d9 0x32f7d7 0x32f7d9 0x32f6b7 0x23036d 0xd7e2c 0xd83a9 0xd85cb 0x38a73 0x38ce2 0x38ea8 0x3fd9a 0x10be6 0x118a6 0x20743 0x211f8 0x14aa9 0x138cfa9 0x14761c5 0x13db022 0x13d990a 0x13d8db4 0x13d8ccb 0x112a7 0x12a9b 0x1fed 0x1f15为0x1)终止叫做抛出异常(LLDB) 有人可以告诉我出了什么问题吗?我正在使用Xcode 4.5。

13
隐藏了UIViews的自动布局?
我觉得这UIViews通常UILabels是根据业务逻辑来显示/隐藏的一种相当常见的范例。我的问题是,使用AutoLayout响应隐藏视图的最佳方法是什么,就像它们的框架是0x0一样。这是1-3个功能的动态列表的示例。 现在,从按钮到最后一个标签,我有10px的顶部空间,当标签隐藏时,它显然不会向上滑动。到目前为止,我已经创建了此约束的出口,并根据要显示的标签数修改常数。因为我使用负常量值将按钮向上推到隐藏帧上,所以这显然有点不客气。这也很糟糕,因为它不限于实际的布局元素,仅基于已知高度/其他元素的填充进行隐蔽的静态计算,并且显然与AutoLayout的用途有所抵触。 很明显,我可以根据我的动态标签创建新的约束,但这要尝试折叠一些空白,这需要大量的微观管理和冗长的工作。有更好的方法吗?更改帧大小0,0并让AutoLayout无需约束即可操作吗?完全删除视图? 坦白说,仅从隐藏视图的上下文中修改常量就需要一行代码,并且计算简单。重新创建新的约束 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:似乎很繁重。 编辑二月2018:看到本的答案与UIStackViews

15
UITextView使用自动布局扩展为文本
我有一个以编程方式完全使用自动布局的视图。我在视图中间有一个UITextView,上面和下面都有项目。一切正常,但是我希望能够在添加文本时扩展UITextView。随着扩展,这应该将其下方的所有内容向下推。 我知道如何以“弹簧和支柱”的方式进行操作,但是是否有自动布局的方式来执行此操作?我能想到的唯一方法是每次需要增长时都删除并重新添加约束。

11
使用自动版式时,如何调整CALayer的锚点?
注意:自从提出此问题以来,事情一直在发展;请参阅此处以获得近期的良好概述。 在自动布局之前,可以通过存储框架,设置锚点并还原框架来更改视图图层的锚点,而无需移动视图。 在自动布局的世界中,我们不再设置框架,但是约束似乎并没有完成将视图的位置调整回我们想要的位置的任务。您可以修改约束以重新定位视图,但是在旋转或其他大小调整事件上,这些约束将再次变为无效。 以下聪明的想法行不通,因为它会创建“布局属性(左和宽度)无效配对”: layerView.layer.anchorPoint = CGPointMake(1.0, 0.5); // Some other size-related constraints here which all work fine... [self.view addConstraint: [NSLayoutConstraint constraintWithItem:layerView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:layerView attribute:NSLayoutAttributeWidth multiplier:0.5 constant:20.0]]; 我的目的是将layerView具有调整后的锚点的视图的左边缘设置为其宽度的一半加上20(我要从超级视图的左边缘插入的距离)。 在以自动版面布局的视图中,是否可以在不更改视图位置的情况下更改锚点?我是否需要使用硬编码值并在每次旋转时编辑约束?我希望不会。 我需要更改锚点,以便在对视图应用变换时获得正确的视觉效果。
161 ios  calayer  autolayout 



13
UILabel sizeToFit不适用于自动布局iOS6
我应该如何以编程方式(和使用哪种方法)配置高度取决于其文本的UILabel?我一直在尝试使用Storyboard和代码的组合进行设置,但无济于事。每个人sizeToFit在设置lineBreakMode和时都建议numberOfLines。但是,不管我把代码viewDidLoad:,viewDidAppear:或者viewDidLayoutSubviews我不能得到它的工作。我要么将框设置得太小而不能容纳较长的文本,否则它不会增大,或者我将其设置得太大而不会收缩。
152 ios  ios6  uilabel  autolayout 

4
如何调整超级视图的大小以适合具有自动布局的所有子视图?
我对自动布局的理解是,它采用了超级视图的大小,并基于约束和内在大小来计算子视图的位置。 有没有办法扭转这个过程?我想根据约束和内在大小调整Superview的大小。最简单的方法是什么? 我在Xcode中设计了视图,并将其用作的标题UITableView。该视图包括标签和按钮。标签的大小取决于数据。根据约束,标签可以成功按下按钮,或者如果按钮和超级视图底部之间存在约束,则标签将被压缩。 我发现了一些类似的问题,但没有好的和简单的答案。

20
具有动态单元格高度的UITableView的reloadData()导致跳跃式滚动
我觉得这可能是一个常见的问题,并且想知道是否有任何通用的解决方案。 基本上,我的UITableView具有每个单元格的动态单元格高度。如果我不在UITableView和I的顶部,则tableView.reloadData()向上滚动变得跳动。 我相信这是由于以下事实:当我向上滚动时重新加载数据时,UITableView正在重新计算每个可见单元的高度。如何缓解这种情况,或者如何仅将数据从某个IndexPath重新加载到UITableView的末尾? 此外,当我确实设法一直滚动到顶部时,我可以先向下再向上滚动,毫无问题。这很可能是因为已经计算了UITableViewCell的高度。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.