[英]creating auto resizeable views for different screen size in interface builder of xcode 8 using auto layout using multipliers
我試圖做到這一點使用Autoresizing
在IB
,使用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)中,所有視圖(第四個小圖像視圖和帶有白色背景的視圖)應與第一個圖像上的外觀相對應地定位和縮放 。
更新:添加了代碼我只是對@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])
}
}
此代碼的問題是我必須獲取不同屏幕尺寸的所有圖像視圖視圖的坐標並對其進行硬編碼,我認為這不是一個好習慣
以給定一半高度的視圖A作為主視圖高度的約束。 之后,給所有圖像相同的高度和寬度constarin。 給出一個圖像的x,y約束並以視圖A的中心為中心。 並鏈接所有設置不完整的圖像約束。
您必須為ImageView的頂部和左側約束設置隨機值。
func addImageAtRadomPosition() {
let imageView = UIImageView()
imageView.backgroundColor = UIColor.red
imageView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(imageView)
let imageSize: CGFloat = 50.0
let screenHeight = UIScreen.main.bounds.size.height
let screenWidth = UIScreen.main.bounds.size.width
// Get random values which will be used for top and left constraints
let randomYPosition = Int(arc4random_uniform(UInt32(screenHeight - imageSize)))
let randomXPosition = Int(arc4random_uniform(UInt32(screenWidth - imageSize)))
let topConstraint = NSLayoutConstraint(item: imageView, attribute: .top, relatedBy: .equal, toItem: self.topLayoutGuide, attribute: .bottom, multiplier: 1, constant: CGFloat(randomYPosition))
let leftContraint = NSLayoutConstraint(item: imageView, attribute: .left, relatedBy: .equal, toItem: self.view, attribute: .left, multiplier: 1, constant: CGFloat(randomXPosition))
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])
}
調用此方法的次數為ImageViews的次數
for _ in 0...5 {
addImageAtRadomPosition()
}
為了實現預期的輸出,我轉到了此參考資料[reference]: https : //developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/AnatomyofaConstraint.html ,所以我所要做的就是
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.