用過 StoryBoard 的同學(xué)一定非常享受往頁面上拖控件铃彰,再拖幾個約束就搞定一個 UI 元素的過程,但是在某些情況下昧港,我們還是不得不使用代碼來進行控件初始化和 frame 設(shè)置召调,這時候如果你懶得寫那 N 行的初始化代碼,你一定會想“要是能在 StoryBoard 中初始化控件创葡,再用代碼調(diào)用就好了”浙踢,這事完全可行的,詳細使用方法如下:
- 拖動一個控件到目標 ViewController 的文檔樹中
這時候 ViewController 看起來是這樣的:
- 綁定到成員變量
import UIKit
class ViewController: UIViewController {
@IBOutlet var segmentControl: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
- 調(diào)用
我們將使用這個 segment control 作為頂欄的標題元素灿渴,即把它放到標題的位置:
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.titleView = self.segmentControl
}
結(jié)果:
- One more thing
需要注意另外一種情況:如果這個視圖已經(jīng)是 ViewController 文檔樹的一部分洛波,那么當(dāng)我們想把它從文檔樹里抽出來單獨放到其他地方時,會出現(xiàn)位置異常:
運行結(jié)果卻是:
frame 設(shè)置失效了骚露?確實失效了蹬挤,不過設(shè)置一下屬性就可以讓 frame 設(shè)置重新有效:
self.label.removeFromSuperview()
self.label.translatesAutoresizingMaskIntoConstraints = true // 就是我
self.label.center = self.view.center
self.view.addSubview(label)
成功:
本文轉(zhuǎn)自大神 JohnLui 文章 https://autolayout.club/2016/06/25/可視化編程-Tips-之“如何使用-StoryBoard-初始化-UI-控件并通過代碼調(diào)用”/#more