元件設定 auto layout 後,修改 frame 或 frame.size 是無效的
Published in
Aug 27, 2022
使用 UIKit 元件設計 iOS App 畫面時,我們通常會在元件上設定 auto layout,讓 App 畫面在各種尺寸的 iPhone 都能美美地顯示。
當元件加上 auto layout 條件後,iOS 將依據這些條件計算出元件的位置和大小,因此元件的 frame 將由 auto layout 決定。若是後來想改變元件的位置大小,建議透過以下兩種方法:
- 方法 1: 修改元件的 auto layout 條件。
- 方法 2: 設定元件的 transform。
除了剛剛提到的兩個方法,也許有人會想到,能不能直接修改元件的 frame 或 frame.size 呢?
很遺憾的,不行。一旦你在元件上設定 auto layout 條件,之後修改元件的 frame 或 frame.size 將不會有任何作用。
比方下圖的瓢蟲照片設定了大小跟置中的 auto layout 條件。
此時我們修改圖片的 frame 或 frame.size 將不會有任何作用。
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
imageView.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
}
}
不過單獨改變位置倒是可以,比方修改 frame.origin。
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
imageView.frame.origin = .zero
}