我有一個UIView被添加到UIViewController,我想確保視圖已經完全加載,因爲我想訪問和使用這些視圖的框架。我在UIView內工作,ViewController僅用於測試目的。如何在UIView完全加載時得到通知
這裏是我一起工作的例子:
我加載自定義的UIView到一個UIViewController所以我初始化下列方式的觀點:
在UIViewController中
var slideView: BSlideBar = BSlideBar(frame: CGRect(x: 0, y: 150, width: 320, height: 54))
self.view.addSubview(slideView)
在UIView
我有一個XIB文件作爲與我的UIView相關聯,所以我在自定義init函數中加載了Nib。
這個UIView裏面有其他的UIViews,並且都被添加到了UIViewController中。這是所有工作正常,問題是當我試圖訪問這些意見的屬性:
例子:
draggableView.layer.cornerRadius = draggableView.frame.width/2
這將使draggableView了一圈,也讓我基地的規模包含在視圖中的draggableView同時將其保持爲圓形。這意味着我的觀點將保持一致,無論我初始化它的框架。令人討厭的是,框架總是作爲XIB文件中的框架而不是加載的UIView的框架返回。 (如果我點擊一個按鈕後它已經裝載了它然後返回預期的和期望的幀)
實施例2:
self.centreLine.frame = CGRect(x: Int(sidePadding), y: Int(slideView.frame.height/2), width: Int(UIScreen.main.bounds.width - 2 * sidePadding), height: 2)
我再次想此視圖可調節到該視圖的大小,它包含在這種情況下,它應該保持在邊緣的填充範圍內,並且完全位於視圖的中間。事實並非如此。
我試圖用使用this答案:
-(void)awakeFromNib
override func layoutSubviews() {
super.layoutSubviews()
}
但是這些都似乎被稱爲足夠晚。
問題部分是由於作爲一個UIView裏面,因爲我通常會叫這樣的:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
}
我略有困惑,但在找出爲什麼這個問題會發生真正的興趣。我面臨的主要問題是簡明地搜索問題,並耗盡了我目前的所有線索。
https://stackoverflow.com/questions/4501974/uiview-how-to-get-notified-when-the-view-is-loaded –
我已經將此問題鏈接到我的問題。這可能是我誤解了哪個函數是適合使用的函數。任何額外的解釋將是偉大的 –