我正在一个需要创建可定制共享卡的项目(了解人们以后可以导出以在社交媒体上共享的图像)。
我将这些共享卡构建为普通的UIView,其中包含其他几个UI元素(大部分为UIImageViews和UILabel)。
为简单起见,我们称之为 SharingCardView 。
由于此视觉效果将被导出和共享,因此我需要在所有设备上使其外观完全相同。因此,我的理解是,我需要使AutoLayout约束具有基于用户设备屏幕大小的响应常数。
想象一下,我先在iPhone上然后在iPad上显示UIView,我想保持 SharingCardView 内所有内容的纵横比,这样人们就看不到从iPhone或iPad。
###问题:
我希望能够将标签固定在SharingCardView的顶部 **,常量为10%**,如下图所示。
###到目前为止,我已经尝试过这种方式
我试图将常量设置为self.bounds.width * 0.1,但是当我创建视图边界时,该边界显然等于0,因此约束条件只是将所有内容固定在最顶部而没有任何填充。
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
)
任何建议都会很有帮助。而且,如果您认为该方法完全错误,那么我将竭尽全力寻求替代解决方案。
答案 0 :(得分:2)
请勿使用框架/边界设置约束!仅使用约束关系来设置约束。因此,在这里,您希望此顶部约束为超级视图的高度约束的1/10。这样,该比率将为 live ,在运行时取决于超级视图的高度实际为多少。
但是,您不能这样做,因为您只能在一个高度限制和另一个高度限制之间形成这种比率。
因此,您将不得不使用不可见的间隔视图,其高度限制为超级视图的高度限制的1/10(即,高度限制相等,multiplier
为0.1
)。
我完全不需要任何代码就可以在Interface Builder中轻松实现这一目标。在我的屏幕快照中,可以看到不可见的间隔视图,因此您可以看到窗帘后面的那个人...!
答案 1 :(得分:0)
您可以通过使标签的顶部约束与共享视图的centerY相关来实现
您将shareView的大小与它的superView设置成比例,因此在不同的设备中运行时,centerY值将有所不同,假设您要使共享视图高度的常数保持为1/10,那么您就可以这样做
topConstraintOfLabel =(centerYOfShareView * 2)* 1/10
=
topConstraintOfLabel = centerYOfShareView * 1/5
之所以这样做,是因为我们不能用height约束top约束,所以我们使用centerY并将想要的长宽比加倍为centerY = 0.5 * height,同样的事情也适用于centerX的前导/尾随
答案 2 :(得分:0)
您可以使用视图并通过使用乘数从超级视图中为视图提供空间。因此,当您的超级视图大小更改时,视图会根据乘数自动更改其大小。