Questions tagged «autolayout»

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

6
自动布局-使视图高度相对于一半超级视图高度
最近一直在使用自动布局,而我一直停留在一个看似微不足道的问题示例上。我有一个视图,我想坐在屏幕顶部,占据屏幕高度的一半。自动布局之前很简单-只需固定就位,并在调整超级视图大小时告诉它垂直扩展即可。 现在,我一辈子都看不到该怎么做。这是我尝试进行设置时得到的: 底部空间约束设置为“等于284”,当我更改为iPhone4布局时,这对我来说绝对是绝对没有用的,因为它在屏幕底部保留284个点的空间,并将视图缩小到不再是屏幕的一半。屏幕尺寸。而且无法将约束设置为等于其他任何视图高度的一部分。 经过一段时间的努力,我唯一想到的方法是在该视图下引入另一个视图,将它们的高度相等地钉住,让它们彼此上下放置,然后将第二个(底部)视图设置为不可见..这看起来有点丑! 我是否缺少明显的东西?
136 ios  autolayout 

6
iOS:如何为新的自动布局约束(高度)设置动画
我以前从未使用过自动布局约束。我正在使用一个小型新应用程序,并且注意到NIB的视图默认为自动布局。因此,我认为我将借此机会与之合作,并尝试弄清苹果公司将如何发展。 第一个挑战: 我需要调整MKMapView的大小,然后将其设置为新位置。如果我以惯常的方式这样做: [UIView animateWithDuration:1.2f animations:^{ CGRect theFrame = worldView.frame; CGRect newFrame = CGRectMake(theFrame.origin.x, theFrame.origin.y, theFrame.size.width, theFrame.size.height - 170); worldView.frame = newFrame; }]; ...然后,无论何时更新同级视图(在我的情况下,UISegmentedControl的标题正在更新[myUISegmentedControl setTitle:newTitle forSegmentAtIndex:0]),MKMapView都会“捕捉”回到其原始高度。 所以,我觉得我想要做的是从等于父视图的HIGHT到可相对于UISegmentedControl,它的顶部改变的MKMapView的限制被覆盖:V:[MKMapView]-(16)-[UISegmentedControl] 我想要的是缩短MKMapView的高度,以便显示地图视图下的某些控件。为此,我认为我需要将约束从固定的全尺寸视图更改为底部约束到UISegmentedControl顶部的约束...并且我希望它随着视图缩小到新大小而进行动画处理。 如何做到这一点? 编辑- 尽管视图的底部确实会立即向上移动170,但该动画没有设置动画: [UIView animateWithDuration:1.2f animations:^{ self.nibMapViewConstraint.constant = -170; }]; 并将其nibMapViewConstraint在IB中连接到底部的垂直空间约束。

15
UICollectionView,全宽单元格,是否允许自动布局动态高度?
在垂直方向UICollectionView, 是否可以使用全宽单元格,但是可以通过自动布局控制动态高度? 这让我感到震惊,因为它可能是“ iOS中最重要的问题,没有一个很好的答案”。 重要: 请注意,在99%的情况下,要实现全宽单元格+自动布局动态高度,只需使用表格视图即可。就这么简单。 那么在哪里需要收集视图的示例是什么? 集合视图比表视图强大得多。 一个简单的示例,您实际上必须使用集合视图来实现全宽单元+自动布局动态高度: 如果在集合视图中的两个布局之间制作动画。例如,当设备旋转时,在1列和2列之间。 这是iOS中的一个普通习惯用法。不幸的是,这只能通过解决此质量保证中提出的问题来实现。:-/

13
如何使用FlowLayout确定UICollectionView的高度
我UICollectionView有一个UICollectionViewFlowLayout,我想计算其内容大小(以返回intrinsicContentSize通过AutoLayout调整其高度所需的返回值)。 问题是:即使我所有单元格的高度都固定且相等,我也不知道在中有多少“行” /行UICollectionView。我也无法通过数据源中的项目数来确定该计数,因为代表数据项的单元格的宽度不同,因此,在一行中的项目数也随之变化UICollectionView。 由于我在官方文档中找不到关于此主题的任何提示,并且谷歌搜索没有给我带来任何进一步的帮助,因此,我们将不胜感激任何帮助和想法。

24
UITableView动态单元格高度仅在某些滚动后才正确
我有一个使用自动布局在情节提要中定义UITableView的自UITableViewCell定义。该单元具有多个多行UILabels。 在UITableView出现要正确计算单元格高度,但在最初的几个细胞高度不正确的标签之间的分歧。滚动一点后,一切都会按预期进行(即使最初不正确的单元格也是如此)。 - (void)viewDidLoad { [super viewDidLoad] // ... self.tableView.rowHeight = UITableViewAutomaticDimension; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { TableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"TestCell"]; // ... // Set label.text for variable length string. return cell; } 有什么我可能会丢失的东西,导致自动布局无法在最初的几次中完成它的工作吗? 我创建了一个示例项目来演示此行为。

30
UITableViewCell子类“执行-layoutSubviews之后仍需要自动布局”
使用XCode 4.5和iOS 6,我正在开发带有带有自定义单元格的简单表格视图的应用程序。我已经在iOS 5及更低版本中完成了一百次,但是由于某种原因,新的autoLayout系统给我带来了很多麻烦。 我在IB中设置了表格视图和原型单元,添加了子视图并将其连接为IBOutlets,然后设置了我的委托和数据源。但是现在,无论何时从中获取第一个单元格cellForRowAtIndexPath,我都会遇到以下错误: ***-[[ShopCell layoutSublayersOfLayer:],/ SourceCache / UIKit_Sim / UIKit-2372 / UIView.m:5776中的断言失败 ***由于未捕获的异常“ NSInternalInconsistencyException”而终止应用程序,原因:“执行-layoutSubviews之后仍需要自动布局。ShopCell的-layoutSubviews实现需要调用超级。” 我尚未在我的子类化单元(ShopCell)中实现-layoutSubviews方法,即使我尝试这样做并添加超级调用也是如此,因为这表明我仍然遇到相同的错误。如果我从IB的单元格中删除子视图,然后将其更改为标准的UITableViewCell,则一切都会按预期进行,尽管我的单元格中当然没有数据。 我几乎可以肯定,我缺少一些简单的东西,但是找不到任何文档或指南来建议我做错了什么。任何帮助,将不胜感激。 编辑:只是尝试将其更改为IB中的UITableViewCell,并将所有子视图保留在原处,仍然是相同的错误。

3
如何使用自动布局创建总宽度的百分比?
我需要创建三个动态列,每个动态列占总宽度的固定百分比。不是三分之二,而是不同的价值。例如,下图显示了三列:第一列为42%宽,第二列为25%宽,第三列为33%宽。 对于跨ViewController的600像素,分别为252、150和198像素。 但是,对于任何后续显示尺寸(例如,iPhone 4横向(960宽)或iPad 2纵向(768宽)),我希望相对百分比相同(而不是上面引用的像素宽度)。 有没有办法使用Storyboard(即没有代码)来做到这一点?我可以在代码中轻松地做到这一点,但我的目标是将尽可能多的显示逻辑放入情节提要中。
114 ios  xcode  autolayout 

5
使用自动布局在UICollectionView中指定单元格的一维
在iOS 8中,UICollectionViewFlowLayout支持根据单元格自身的内容大小自动调整其大小。这将根据其内容在宽度和高度上调整单元格的大小。 是否可以为所有单元格的宽度(或高度)指定固定值,并允许其他尺寸调整大小? 对于一个简单的示例,请考虑单元格中的多行标签,将其放置在单元格的侧面有约束。多行标签可以用不同的方式调整大小以容纳文本。单元格应填充集合视图的宽度,并相应地调整其高度。而是随意调整单元格的大小,并且当单元格大小大于集合视图的不可滚动尺寸时,甚至会导致崩溃。 iOS 8引入了该方法。systemLayoutSizeFittingSize: withHorizontalFittingPriority: verticalFittingPriority:对于集合视图中的每个单元格,布局在单元格上调用此方法,并传入估计的大小。对我来说有意义的是在单元格上覆盖此方法,传递给定的大小,并将水平约束设置为required,将低优先级设置为纵向约束。这样,水平尺寸固定为布局中设置的值,垂直尺寸可以灵活。 像这样: - (UICollectionViewLayoutAttributes *)preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes { UICollectionViewLayoutAttributes *attributes = [super preferredLayoutAttributesFittingAttributes:layoutAttributes]; attributes.size = [self systemLayoutSizeFittingSize:layoutAttributes.size withHorizontalFittingPriority:UILayoutPriorityRequired verticalFittingPriority:UILayoutPriorityFittingSizeLevel]; return attributes; } 但是,用这种方法返回的大小是完全奇怪的。我对这种方法的文档非常不清楚,并提到使用UILayoutFittingCompressedSize UILayoutFittingExpandedSize仅代表零大小和相当大的常数的常量。 size此方法的参数真的只是传递两个常量的一种方法吗?有没有办法实现我期望的行为以获得给定尺寸的适当高度? 替代解决方案 1)添加将为单元指定特定宽度的约束以实现正确的布局。这是一个较差的解决方案,因为应该将该约束设置为它没有安全引用的单元格收集视图的大小。在配置单元格时可以传递该约束的值,但这似乎完全违反直觉。这也很尴尬,因为直接将约束添加到单元格或其内容视图会导致很多问题。 2)使用表格视图。表格视图开箱即用,因为单元格具有固定的宽度,但是这不能适应其他情况,例如iPad布局中具有固定宽度的单元格在多列中。

7
自动布局:将约束添加到超级视图而非“顶部布局指南”吗?
我在情节提要中的UIViewController中有一个UIView,我想在该空间上添加一个约束以查看与顶部边缘之间的距离。 现在,当我通过ctrl +拖动到ViewController的主视图来执行常规操作时,我只能得到将其设置为顶部布局指南的选项。 这对我来说是个问题,因为在应用程序中,我会在某个时刻将主视图向上移动20-50px,然后发生的事情是我所拥有的视图将不会移动...因为它不与超级视图对齐。 如何在情节提要中手动执行此操作,还是必须以编程方式添加它? 我正在使用xcode 6。

8
是否可以使用“自动布局”获得动态表格视图节标题高度?
iOS 8中的新增功能,您只需设置估计的行高即可获得100%动态表视图单元格,然后使用“自动布局”在单元格中布局元素。如果内容的高度增加,单元格的高度也会增加。这非常有用,并且想知道表视图中的节标题是否可以实现相同的功能? 例如,是否可以创建一个UIViewin tableView:viewForHeaderInSection:,添加一个UILabel子视图,针对视图指定标签的自动布局约束,以及使视图的高度增加以适合标签的内容,而无需实施tableView:heightForHeaderInSection:? 有关viewForHeaderInSection状态的文档:“仅当还实现了tableView:heightForHeaderInSection:时,此方法才能正确工作。” 我还没有听说iOS 8是否有任何更改。 如果不能做到这一点,模仿这种行为的最佳方法是什么?

6
删除视图后,约束会发生什么
我的问题很简单,但是在文档中找不到任何信息。 从视图层次结构中删除视图(或移至另一个视图)时,布局约束会发生什么? 例如,让我们有C带有子视图A和的容器B。容器C具有一些约束。然后我们打电话[A removeFromSuperview]。约束条件会发生什么A? 如果再次添加A,会发生什么C?

5
使用自动布局约束时,如何获取视图的当前宽度和高度?
我不是在谈论frame属性,因为从那里您只能在xib中获得视图的大小。我说的是由于其约束(可能在旋转后或响应事件)时,何时调整视图的大小。有没有办法获取其当前的宽度和高度? 我尝试遍历其约束以寻找宽度和高度约束,但这并不是很干净,并且在存在固有约束时会失败(因为我无法在两者之间进行区分)。而且,这仅在它们实际具有宽度和高度约束时才有效,而在依靠其他约束来调整大小时则不起作用。 为什么这对我来说如此困难。啊!
108 ios  autolayout 

10
UITableViewCell中的iOS7上的自动布局约束问题
我正在以编程方式使用自动布局约束来布局自定义UITableView单元,并且正确定义了 tableView:heightForRowAtIndexPath: 这是对iOS6的工作得很好,它的外观罚款iOS7以及 但是,当我在iOS7上运行该应用程序时,这是我在控制台中看到的消息: Break on objc_exception_throw to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 2013-10-02 09:56:44.847 Vente-Exclusive[76306:a0b] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you …

8
什么时候可以激活/停用布局约束?
我在IB中设置了多组约束,并且我想根据某种状态以编程方式在约束之间进行切换。有一个constraintsA插座集合都标记为已从IB安装,而constraintsB所有插座集合都已从IB 中卸载。 我可以通过编程方式在两组之间切换,如下所示: NSLayoutConstraint.deactivateConstraints(constraintsA) NSLayoutConstraint.activateConstraints(constraintsB) 但是...我不知道何时该做。看来我应该能够一次完成该操作viewDidLoad,但是我无法使其正常工作。我已经打过电话view.updateConstraints(),并view.layoutSubviews()设置约束条件之后,但无济于事。 我确实发现,如果我在viewDidLayoutSubviews所有工作中都按预期设置了约束,我想我想知道两件事... 为什么会出现这种情况? 是否可以从viewDidLoad激活/停用约束?

14
我可以在运行时为特定的子视图禁用自动布局吗?
我有一个视图,需要以编程方式对其框架进行操作-这是一种文档视图,它包装到其内容,然后通过操纵框架原点在超级视图周围滚动和缩放。Autolayout在运行时与此作斗争。 完全禁用自动布局似乎有点困难,因为它可以合理地用于处理其他视图的布局。似乎我可能想要某种“空约束”。

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.