![](/img/trans.png)
[英]How to set topMargin in percentage of superview in autolayout in storyboard?
[英]How can I set AutoLayout constraints' constant as a percentage of the superview?
我正在做一个需要创建可自定义共享卡的项目(了解人们以后可以导出以在社交媒体上共享的图像)。
我将这些共享卡构建为普通的UIView,其中包含其他几个UI元素(主要是UIImageViews和UILabels)。
为了简单起见,我们将其称为SharingCardView 。
由于此视觉效果将被导出和共享,因此我需要在所有设备上使其外观完全相同。 因此,我的理解是,我需要使AutoLayout约束具有基于用户设备屏幕大小的响应常数。
想象一下,我先在iPhone上显示该UIView,然后在iPad上显示,我想要保持SharingCardView内部所有内容的纵横比,这样人们就看不到从iPhone或iPad导出的视觉效果之间的任何区别。
### 题:
我希望能够以10%的常数将标签固定在SharingCardView ** 的顶部,如下图所示。
###到目前为止,我已经尝试过这种方式
我试图将常量设置为self.bounds.width * 0.1,但是当我创建视图边界时,该值显然等于零,因此约束条件只是将所有内容固定在最顶层,而没有任何填充。
nowUpOnYTLbl.anchor(top: topAnchor,
left: leftAnchor,
bottom: nil,
right: rightAnchor,
paddingTop: self.bounds.width * 0.1,
paddingLeft: 30,
paddingBottom: 0,
paddingRight: 30,
width: 0,
height: 20
)
任何建议将超级有帮助。 而且,如果您认为该方法完全错误,那么我将竭尽全力寻求替代解决方案。
您可以通过使标签的顶部约束与共享视图的centerY相关来完成此操作
您将shareView的大小与它的superView设置成比例,因此在不同的设备中运行时,centerY值将有所不同,假设您要使共享视图高度的此常数为1/10,那么您可以
topConstraintOfLabel =(centerYOfShareView * 2)* 1/10
=
topConstraintOfLabel = centerYOfShareView * 1/5
之所以这样做,是因为我们不能用height约束top约束,所以我们使用centerY并将想要的长宽比翻倍为centerY = 0.5 * height,同样的事情也适用于centerX的前/后
您可以使用视图并通过使用乘子从超级视图中为视图提供空间。因此,当您的超级视图大小更改时,视图会根据乘数自动更改其大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.