【发布时间】:2017-02-06 13:16:13
【问题描述】:
我曾尝试在IB 中使用Autoresizing 来实现这一点,使用constraints 等
- 固定,
- 纵横比,
- 垂直间距,
- 水平/垂直间距,
- 前导/尾随空格;
但似乎没有一个适用于所有屏幕尺寸。
例如
iphone 7 中的 4 个图像视图是它们所需的输出位置,但一旦我在iphone 7 plus 屏幕尺寸或iphone SE 屏幕尺寸中检查它,这些图像视图就会改变位置。
以下是 iphone 7 上的预期输出。
iphone7 图片
下面是 不期望的输出,因为 iphone 7 plus 上 4 个图像视图的位置发生了变化。 iphone7plus
我希望再分享一张 iPhone SE 的图片,其中所有 4 张图片视图的位置变化更剧烈,但无法分享导致声誉低于 10
我将解释,例如,从第一张图像,即 iphone 7,这 4 个小图像视图可以与白色背景的图像视图一起作为预期位置,但在其他两种屏幕尺寸(iphone7 plus 和 iphoneSE ) 所有视图(4 个小图像视图和白色背景的视图)都应该与第一个视图相比具有相应的定位和缩放。
更新:添加代码 我刚刚对@diana_prodan 在这篇文章中得到的答案之一进行了一些更改,以获得预期的输出。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var imgOne: UIImageView!
@IBOutlet weak var imgTwo: UIImageView!
@IBOutlet weak var imgThree: UIImageView!
@IBOutlet weak var imgFour: UIImageView!
let icon_small : Float = 45.0
let icon_medium : Float = 50.0
override func viewDidLoad() {
super.viewDidLoad()
let viewSize = UIScreen.main.bounds.size
print(viewSize)
//image positioned
//for 4' screen
if (viewSize.height == 568.0){
addImageAtPosition(imgOne, icon_small,41, 106 )
addImageAtPosition(imgTwo, icon_small,105,91 )
addImageAtPosition(imgThree, icon_small,105, 147)
addImageAtPosition(imgFour, icon_small,139, 197 )
//for 4.7' screen
}else if(viewSize.height == 667.0){
addImageAtPosition(imgOne, icon_medium,52, 135 )
addImageAtPosition(imgTwo, icon_medium,127,106 )
addImageAtPosition(imgThree, icon_medium,127, 172 )
addImageAtPosition(imgFour, icon_medium,167, 230 )
//for 5.5' screen
}else if(viewSize.height == 736.0){
//add code woth cordinates for 5.5 screen size iPhone
}
}
//method to positon image views
func addImageAtPosition(_ img:UIImageView, _ size: Float, _ y: Float, _ x: Float) {
let imageView = img
imageView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(imageView)
let imageSize: CGFloat = CGFloat(size)
let topConstraint = NSLayoutConstraint(item: imageView, attribute: .top, relatedBy: .equal, toItem: self.topLayoutGuide, attribute: .bottom, multiplier: 1, constant: CGFloat(y))
let leftContraint = NSLayoutConstraint(item: imageView, attribute: .left, relatedBy: .equal, toItem: self.view, attribute: .left, multiplier: 1, constant: CGFloat(x))
let widthConstraint = NSLayoutConstraint(item: imageView, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: imageSize)
let heightConstraint = NSLayoutConstraint(item: imageView, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: imageSize)
view.addConstraints([topConstraint, leftContraint, widthConstraint, heightConstraint])
}
}
此代码的问题是我必须获取不同屏幕尺寸上所有图像视图视图的坐标并对其进行硬编码,我认为这不是一个好习惯
【问题讨论】:
-
添加您的预期输出。
-
@the_dahiya_boy : 已提供链接。
-
请像我一样在这里添加图片,不要提供链接,因为它会降低问题质量。添加您所做的方法,以便我们检查您做错了什么。
-
@the_dahiya_boy 我已经做到了。
标签: ios swift interface-builder xcode8 ios-autolayout