请看下面的花卉设置的屏幕截图。花卉图像已从资产目录中正确加载,当应用程序在各种模拟器上运行时,会为每个设备分配正确的像素分辨率。我的问题是如何让每个设备上的花图像缩放(大小相同)? 我已经学会了如何使用约束和帧将图像定位到不同的位置,但图像从未正确缩放 - 请参见第一张图片
以下图片模拟了我想要做的事情(在每台设备上正确缩放花卉图像)
答案 0 :(得分:2)
根据您的模型判断,看起来您希望图像填充宽度的一半,并保持其正方形宽高比以确定其高度。解决此问题的一种方法是使用AutoLayout创建左侧UIImageView和右侧占位符(空白)视图。将左视图固定到父视图的左边缘,将右视图固定到右边缘,然后将它们设置为彼此相差0像素。然后在它们上设置相等的宽度约束。最后,控制将图像视图拖动到自身,您可以选择纵横比 - 并假设在IB中,宽度和高度相同,它将保持正方形。添加相等的高度约束将为另一个视图提供在需要时它需要相等的高度。
这为您提供了50%的左图像视图,并且您的模式设置为Aspect Fit或Aspect Fill,它应该为您提供模型中的结果。如果您的图像不是正方形,请确保检查UIImageView的剪辑子视图以防止显示溢出。
答案 1 :(得分:0)
真正的问题是你的目标没有明确定义。与什么相关?屏幕有高度和宽度。您无法对两者进行缩放,因为这会使图像失真(因为不同的设备具有不同的整体宽高比)。因此,您必须选择一个可缩放的维度。
从你的模型判断,我猜你想要的是按照 height 进行缩放。如果是这样,那么给图像视图一个高度约束,该高度约束是其超视图高度的固定分数。它看起来像你的模型中的0.25
,但你必须注意你认为是一个很好的部分。
现在,如果图像视图的内容模式是Aspect Fit(或Aspect Fill),图像将随图像视图一起改变其高度,而不会扭曲纵横比。
但是,最好将图像视图的其他尺寸(此处为宽度)设为高度的固定部分,例如使图像视图的纵横比与纵横比相同图像。原因是否则图像可能最终以图像视图为中心,即使图像视图本身也不会触及顶部或左侧。
答案 2 :(得分:0)
CGFloat screen_width = [[UIScreen mainScreen] bounds].size.width;
your_imageview.frame = CGRectMake(0, 0, screen_width/2, screen_width/2);