标签: autolayout

了解自动布局中的乘数以使用相对定位

我试图了解如何利用自动布局相对于其他视图按百分比定位项目.

例如,我最近了解到,您可以使用以下命令指定视图的底部应比其superview的底部高出4%:

self.view.addConstraint(NSLayoutConstraint(item: label, attribute: .Bottom, relatedBy: .Equal, toItem: self.view, attribute: .Bottom, multiplier: 0.96, constant: 0))
Run Code Online (Sandbox Code Playgroud)

这对我来说很有意义,因为1的乘数会在视图的底部对齐它,因此您可以通过将乘数更改为0.96来将该数量减少4%.

但是你怎么能在另一个方向做同样的事情呢?你想指定一个标签的顶部应该从superview的顶部开始下降4%.如果您使用相同的行但是将属性更改为.Top,这意味着它将比superview的顶部高4%(但它实际上不会将其移出屏幕).你不能有一个我不认为的负乘数,而且我不相信大于1的值在常数为0时会做任何事情.所以你如何得到这个设置?

我有同样的问题来实现前导和尾随.尾随很容易.如果你想从右边10%:

self.view.addConstraint(NSLayoutConstraint(item: label, attribute: .Trailing, relatedBy: .Equal, toItem: self.view, attribute: .Trailing, multiplier: 0.9, constant: 0))
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为你拨回0.1或10%而不是完全对齐1.0.但你如何做同样的领导?我以为你可以设置标签相对于视图尾部的前导,然后将乘数设置为0.1.在我看来,这意味着标签将从最右边开始,然后被拨回90%,因此从左边获得所需的10%.但事实并非如此,我不确定为什么.

你能解释一下这是如何工作的,如何正确使用乘数来获得这些相对布局?

为了方便起见,假设您想要创建一个标签,该标签具有超视图高度的10%的顶部和底部,并且尾随并超过超视图宽度的10%.在iPhone的纵向上,标签上方和下方的填充比在左侧和右侧的填充更多,就像这样(是的,它是按比例绘制的):
在此输入图像描述

但是,让我们在iPad上说它将会在一个完美的正方形视图中显示出来.因此,填充将是相同的数量,如下所示:
在此输入图像描述

问题是如何将这些约束定义为动态值,而不是为常量设置固定值.我已经知道如何做到底部和尾随,但顶部和领先让我难过.我希望了解如何使用乘数来进行更高级的布局,例如,指定标签的顶部应该位于另一个标签底部下方10%,而不是将其设置为固定常量.

ios autolayout nslayoutconstraint

29
推荐指数
3
解决办法
3万
查看次数

使用AutoLayout在UIScrollView中使用UITextView

我试图在UIScrollView中使用AutoLayout放置UITextView,但没有运气.我试过的是,

  • 我将UIScrollView放在Storyboard的主视图中
  • 我将UITextView放在故事板中的UIScrollView中,并禁用了Scrolling Enabled
  • 我在UIScrollView上设置了约束(前导,尾随,顶部,底部)
  • 我在UITextView上设置了约束(top,leading,trailing,height)
  • 我创建了UITextView的高度约束的IBOutlet
  • 我在viewDidLoad()中的UITextView上设置了一个文本(很多可能导致滚动的文本)
  • 我用下面的代码设置了UITextView的高度约束.我在viewDidLoad()和viewDidLayoutSubviews()中设置文本后没试过就没试过

self.textViewHeightConstraint.constant = [self.textView sizeThatFits:CGSizeMake(self.textView.frame.size.width, FLT_MAX)].height;

UITextView正在增加其高度,但UIScrollView却没有.有什么我错过的吗?

objective-c uiscrollview uitextview autolayout nslayoutconstraint

29
推荐指数
3
解决办法
2万
查看次数

如何使用autolayout获得真正大小的UIView

我是一名新开发者iOS.

我使用自动布局.

我有个问题.在约束之后,我无法获得UIView的实际大小.

例如,当我想获得UIView带约束的大小时

self.container.frame.size.height
Run Code Online (Sandbox Code Playgroud)

对于所有设备尺寸,它总是返回550.但是当我在差异设备上运行它时,我可以看到它有不同的大小.

谢谢

ios autolayout ios-autolayout

29
推荐指数
6
解决办法
3万
查看次数

如何在使用autolayout进行自动旋转时重新排列视图?

我经常遇到这个问题,我希望我的观点以一种方式排列为纵向,而对于景观则有一种截然不同的方式.

有关简化示例,请考虑以下事项:

肖像:

景观:

请注意,在纵向上图像是垂直堆叠的,但在横向上,它们是并排的?

当然,我可以手动计算位置和大小,但对于更复杂的视图,这很快就会变得复杂.另外,我更喜欢使用Autolayout,因此设备特定的代码更少(如果有的话).但这似乎要写很多 Autolayout代码.有没有办法通过故事板为这类东西设置约束?

uikit ios xcode-storyboard autolayout nslayoutconstraint

29
推荐指数
1
解决办法
1897
查看次数

处理iOS 10中的AutoLayout约束动画差异?

我注意到在iOS 10 Beta 5(即将试用Beta 6)中,AutoLayout约束动画的行为略有不同.

例如,此方法与以前的iOS版本中的工作方式不同:

[view addConstraints:@[constraints...]];

[view setNeedsUpdateConstraints];
[view layoutIfNeeded];

[UIView animateWithDuration:...
{
    /* adjust constraint here... */
    [view layoutIfNeeded]; // Only the adjusted constraints since previous layoutIfNeeded() call should animate change with duration.

} completion:{ ... }];
Run Code Online (Sandbox Code Playgroud)

...在我的测试中,最初添加的约束addConstraints()将在iOS 10中使用UIView 块进行动画处理......这导致了迄今为止一些时髦/不良行为.animateWithDuration()

例如,在数组中设置左/右约束(但块中的垂直约束)会导致整个视图使用此方法对角地在屏幕上进行动画处理......这是完全错误的.

有没有人知道如何正确地为iOS 9(及以下)以及10?

animation uikit autolayout nslayoutconstraint ios10

29
推荐指数
1
解决办法
1万
查看次数

Autolayout和子视图

我正在使用带有Apple的故事板的iAd套件,根据此链接... Apple iAd Storyboard文档

一切正常,直到我打开autolayout.它构建良好,但在运行时崩溃.我得到的输出是:

2013-08-24 12:06:36.138 TabbedBanner [7272:c07] *断言失败 - [UIView layoutSublayersOfLayer:],/ SourceCache/UIKit_Sim/UIKit-2380.17/UIView.m:578 2013-08-24 12:06: 36.139 TabbedBanner [7272:c07]*由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'将-viewDidLayoutSubviews发送到视图控制器后仍需要自动布局.BannerViewController的实现需要将-layoutSubviews发送到视图以调用自动布局.***第一掷调用堆栈:(0x1e27012 0x110ee7e 0x1e26e78 0xba4665 0xa347a 0x11226b0 0x1358fc0 0x134d33c 0x1358eaf 0x1422bd 0x8ab56 0x8966f 0x89589 0x887e4 0x883ef 0x65c9d 0x5098b 0x5194b 0x62cb5 0x63beb 0x55698 0x1700df9 0x1700ad0 0x1d9cbf5 0x1d9c962 0x1dcdbb6 0x1dccf44 0x1dcce1b 0x5117a 0x52ffc 0x2a0d 0x2935)的libc ++ abi.dylib:终止叫抛出异常(lldb)

我知道这与故事板中的子视图有关,但我不知道如何纠正这个错误.我是iOS的新手,并试图自学,所以任何帮助表示赞赏.非常感谢

subview iad subviews autolayout

28
推荐指数
1
解决办法
8661
查看次数

在NIB文件(XIB)中添加顶部布局指南

如何在NIB文件中添加顶部布局指南,或者如何从顶部导航栏和状态栏指定空间,以便它不会在ios 6和iOS 7之间产生问题?

iphone ios autolayout ios7

28
推荐指数
1
解决办法
2万
查看次数

autoresize = RM + BM是什么意思?

我在这行使用Xcode调试控制台时得到这个:

po [[UIWindow keyWindow] recursiveDescription]
Run Code Online (Sandbox Code Playgroud)

然后我用这样的递归描述返回行

<UILabel: 0xb0b8170; frame = (138 106; 200 15); text = 'Distance'; clipsToBounds = YES; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0xb0b8220>>
Run Code Online (Sandbox Code Playgroud)

什么是"autoresize = RM + BM",是否有一个地方可以查找字母的含义?我也看到过类似"autoresize = LM + W + RM + TM + H + BM"的内容.

debugging xcode ios autolayout

28
推荐指数
1
解决办法
9297
查看次数

Swift设置内容抗压性

再次使用Swift,我错过了什么吗?

我有这条线:

self.itemDescription?.setContentCompressionResistancePriority(UILayoutPriorityRequired, forAxis: UILayoutConstraintAxis.Vertical);
Run Code Online (Sandbox Code Playgroud)

但是Xcode给了我一个错误:

Undefined symbols for architecture i386: "_UILayoutPriorityRequired"
Run Code Online (Sandbox Code Playgroud)

另一个斯威夫特的怪癖?

ios autolayout swift

28
推荐指数
2
解决办法
2万
查看次数

UICollectionView iOS版9月刊上与RTL语言的支持项目

看起来Apple的RTL语言自动翻转界面的新功能在使用时会出现问题UICollectionView.

我在集合视图中使用了Trailing/Leading类型的约束,并且他们在RTL语言中切换了它们应该的值.

问题是实际呈现的数据是集合数据源中的最后一个 indexPath,但UIScrollView.contentOffset.x第一个单元格的数据是0.

一个适当的行为将一直执行下列操作之一:

  1. indexPath正确显示第一个并切换滚动方向(向右) - 最佳选项
  2. 不翻转UI/Constraints以使所呈现的数据/ indexPath/ scrollView.contentOffset.x将被同步 - 禁用RTL支持的选项.
  3. 呈现最后一个indexPath的单元格和数据,但也固定scrollView.contentOffset.xto表示最后一个单元格位置.

我猜Apple可能会在将来的某个时候修复它,但同时我们必须使用诸如反转数组和/或滚动到最后一个对象的变通方法.

right-to-left ios autolayout uicollectionview ios9

28
推荐指数
2
解决办法
2376
查看次数