Tag: 自动布局

iOS Autolayout:两个等宽的button,并排

我目前有与AutoLayout的困难。 我正在使用接口生成器,并试图定位两个等宽的并排button,如下图所示。 从下面的预览图像,我的titleImage已被正确约束,正确显示,但button不是。 我已经通过将button1​​与titleImage的前缘alignment以及button2与titleImage的后缘alignment来进行实验,但是在这一点上两个button之间的宽度分布变得歪斜,如下所示。 我的目标是了解什么约束是缺less的,应该适用于两个button,以保持相等的宽度,无论设备。 如果可能的话,我想通过接口生成器来实现这一点,而不是附加的代码。

如何使用自动布局创build总宽度的百分比?

我需要创build三个dynamic列,每个列都有一个固定的总宽度百分比。 不是三分之一,但不同的价值。 例如,下图显示了三列:第一列宽42%,第二列宽25%,第三列宽33%。 对于控制器600像素,分别是252,150和198像素。 然而,对于任何后续的显示尺寸(即iPhone 4横向(960宽)或iPad 2纵向(768宽)),我希望相对百分比是相同的(不是上面引用的像素宽度)。 有没有办法做到这一点使用故事板(即没有代码)? 我可以在代码中轻松完成这项工作,但我的目标是尽可能多地将这种显示逻辑放入故事板中。

如何用FlowLayout确定UICollectionView的高度

我有一个UICollectionView与UICollectionViewFlowLayout ,我想计算其内容大小(为了通过AutoLayout调整其高度所需的intrinsicContentSize返回)。 问题是:即使我对所有的单元格有一个固定和相等的高度,我不知道在UICollectionView有多less“行”/行。 我也不能通过数据源中的项目数来确定计数,因为表示数据项的单元格的宽度是不同的,所以我在UICollectionView一行中有多less个项目。 由于在官方文档中我找不到任何关于这个主题的提示,并且Google的search引擎没有给我带来更多的帮助,所以任何帮助和想法都非常值得赞赏。

如何使用自动布局约束获取视图的当前宽度和高度?

我不是在谈论框架属性,因为从那里你只能在xib中获得视图的大小。 我正在讨论什么时候视图是由于其约束(也许在轮换或响应事件之后)resize的。 有没有办法获得当前的宽度和高度? 我尝试通过约束来寻找宽度和高度约束,但是这不是很干净,并且在存在内在约束时失败(因为我无法区分这两者)。 此外,只有在实际上具有宽度和高度约束的情况下才起作用,如果它们依赖于其他约束来resize,则它们不起作用。 为什么这对我来说如此困难。 ARG!

使用自动布局在UICollectionView中指定单元的一个维度

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

自动布局 – 使视angular相对于超级景观高度的一半

最近已经进入了自动布局,我被卡在似乎是一个非常微不足道的问题的例子。 我有一个观点,我想坐在屏幕的顶部,占据屏幕高度的一半。 在自动布局之前简单 – 只需将其粘贴到位,并在超级视图resize时告诉它垂直展开。 现在,我不能为我的生活看到如何去做。 以下是我尝试设置的内容: 底部空间约束被设置为“等于284”,这是绝对的,当我改变到iPhone4的布局时,对我来说绝对没用,因为它在屏幕底部保留了284个点的空间,并缩小了视图不再是一半屏幕的大小。 而且没有办法将这个约束设置成等于任何其他视图高度的一部分。 经过一段时间的努力之后,我能想到的唯一方法就是在这个视图的下面引入另一个视图,同样地固定它们的高度,让它们坐在上面和下面,然后将第二个(底部)视图设置为不可见..这似乎有点难看! 我错过了什么明显的?

“使用UITableViewCell子类执行-layoutSubviews之后仍然需要自动布局

使用XCode 4.5和iOS 6,我正在开发一个带有自定义单元格的简单表格视图的应用程序。 我已经在iOS 5和更低版本中做了这么多次,但由于某种原因,新的autoLayout系统给我带来了很多麻烦。 我在IB中设置了我的表格视图和原型单元格,添加了子视图并将它们连接成IBOutlets,然后设置我的委托和数据源。 但是,现在无论何时第一个单元格从cellForRowAtIndexPath获取,我得到以下错误: ***声明失败 – [ShopCell layoutSublayersOfLayer:],/ SourceCache /UIKit_Sim/UIKit-2372/UIView.m:5776 ***终止应用程序由于未捕获的exception“NSInternalInconsistencyException”,原因:执行-layoutSubviews后仍然需要自动布局。 ShopCell的-layoutSubviews实现需要调用super。 我没有实现一个-layoutSubviews方法在我的subclassed单元格(ShopCell),甚至当我尝试这样做,并添加超级调用,因为它暗示我仍然得到相同的错误。 如果我从IB中的单元格删除子视图,并将其更改为标准的UITableViewCell,一切都按预期工作,当然我没有数据在我的单元格。 我几乎可以肯定,有一些简单的我错过了,但无法find任何文档或指南来build议我做错了什么。 任何帮助,将不胜感激。 编辑:只是尝试将其更改为IB中的UITableViewCell,并留下所有的子视图,仍然是相同的错误。

Autolayout – UIButton的内在大小不包括标题插入

如果我有一个UIButton使用自动布局排列,其大小调整很好,以适应其内容。 如果我设置一个图像为button.image ,内在大小似乎再次考虑到这一点。 但是,如果我调整button的titleEdgeInsets ,布局不会考虑这个,而是截断button标题。 我怎样才能确保button的内在宽度占内嵌? 编辑: 我正在使用以下内容: [self.backButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)]; 目标是在图像和文本之间添加一些分隔。

如何调整superview以适应所有子视图与自动布局?

我对自动布局的理解是,它需要superview的大小,并基于约束和内在大小来计算子视图的位置。 有没有办法扭转这个过程? 我想根据约束和内在大小调整superview。 什么是实现这个最简单的方法? 我有在Xcodedevise的视图,我用它作为UITableView头。 这个视图包括一个标签和一个button。 标签的大小根据数据而不同。 根据约束条件,标签成功地按下button,或者如果在button和超级视图的底部之间存在约束,则标签被压缩。 我发现了一些类似的问题,但他们没有好的和简单的答案。

我如何使用Autolayout在我的UIScrollview上设置约束?

我已经花了两天的时间尝试了混合和纯粹的Autolayout方法的各种解决scheme,以实现自动布局之前的一个微不足道的scrollview设置,现在是正式的 – 我一定是太愚蠢了。 我主要是在Storyboard中设置它(呃,就是这样)。 所以这是我的求助。 Viewtree: UIView -UIView -UIView ..-UIScrollview …-UIButton …-UIButton …-UIButton button应该水平滚动(从左到右,反之亦然)。 有人可以让我知道如何设置约束,以实现这个使用纯粹的Autolayout? – 我尝试了混合的方法,像这样: UIView – UIView – UIView ..-UIScrollview …-UIView (contentview) ….-UIButton ….-UIButton ….-UIButton …并按照Apple的技术说明为contentview和translatesAutoresizingMaskIntoConstraints设置设置固定的宽度和高度约束。 button和滚动视图使用约束设置。 这得到滚动视图滚动(耶),但唉,它滚动太多了! 据我所知,滚动宽度是从我设置内容视图??? ??? ??? 我也尝试了纯粹的自动布局方法,无论是contentview还是没有。 所有的意见都translatesAutoresizingMaskIntoConstraints=NO self.view translatesAutoresizingMaskIntoConstraints=NO ,除了self.view 。 button具有固定的宽度/高度约束,并固定在滚动视图的所有四个边上。 什么都不滚动。 所以我很困惑为什么我不能正确地工作。 任何帮助非常感谢,如果您需要任何其他信息,请问! 更新解决scheme的屏幕截图 – buttonZ约束: 编辑@杰米福雷斯特因此,解决scheme原来是最后一个button错误的尾随约束。 我所设定的价值是6441,而不是6441。 棘手的是,当在故事板中设置值时,Pin工具栏中有两个选项: 当前canvas值是负值(导致不滚动),下面的选项是正值(激活滚动)。 这意味着我不愚蠢,但至less我是半盲。 虽然,我的辩护,是不是有点令人不安,XCode不显示错误的“不正确的”设置? 再次编辑现在,这很有趣…将尾随值从-6441(不滚动)更改为6441启用滚动。 但是我的老朋友“内容太多”又回来了,导致内容的大小是原来的两倍! […]