繁体   English   中英

如何设置AutoLayout约束的常量占父视图的百分比?

[英]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
        )

任何建议将超级有帮助。 而且,如果您认为该方法完全错误,那么我将竭尽全力寻求替代解决方案。

不要使用框架/边界设置约束! 仅使用约束关系来设置约束。 因此,在这里,您希望此顶部约束为超级视图的高度约束的1/10。 这样,比率将是实时的 ,在运行时取决于超级视图的实际高度。

但是,您不能这样做,因为您只能在一个高度约束和另一个高度约束之间形成这种比率。

因此,您将不得不使用不可见的间隔视图,其高度限制为超级视图的高度限制的1/10(即,高度限制相等, multiplier0.1 )。 我完全不需要任何代码就可以在Interface Builder中轻松实现这一目标。 在我的屏幕快照中,可以看到不可见的间隔视图,因此您可以看到窗帘后面的那个人...!

在此处输入图片说明

在此处输入图片说明

您可以通过使标签的顶部约束与共享视图的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM