2016-09-13 46 views
0

正如問題所述,當我試圖在UIView類中設置一個圖像視圖,將其高度半徑除以2時,它不起作用,所以我決定打印框架的高度,它是0.幀高度打印0

該類中每個視圖的高度或寬度打印0我不知道爲什麼......在此先感謝您的答案。

+0

您是否添加了self.view.addSubView(yourView)的視圖 –

+0

@MatGrlt自從類它的UIView我只寫了addSubview(view) – Rialcom

+0

您在哪裏實例化你的子視圖的框架? –

回答

0

我發現問題所在。當調用UI View類時,我沒有通過參數傳遞這個視圖的實際框架。因此,當這個類初始化器被執行時,框架始終是0.

0

默認情況下,視圖的大小沒有限制。你必須設置某種約束或視圖的框架。

1.限制:viewDidLoad()設置約束,視圖將不會立即獲得大小。爲了讀取大小,您必須在另一個稱爲viewDidLayoutSubviews()的函數中讀取它。在佈置所有視圖後調用該函數。這裏有一個例子,其視圖將獲得其父視圖的大小:

var newView:UIView? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     newView = UIView() 

     newView!.translatesAutoresizingMaskIntoConstraints = false 
     self.view.addSubview(newView!) 

     newView!.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true 
     newView!.rightAnchor.constraint(equalTo: self.view.rightAnchor).isActive = true 
     newView!.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true 
     newView!.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true 
    } 


    override func viewDidLayoutSubviews() { 
     print(newView!.frame) 
    } 

2.框架:通過設置直接的意見框架,可以瞬間讀取它的大小。以下是視圖的框架設置爲與其父視圖相同的範圍的示例:

var newView:UIView? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     newView = UIView() 

     newView?.frame = view.bounds 

     newView!.translatesAutoresizingMaskIntoConstraints = false 
     self.view.addSubview(newView!) 

     print(newView!.frame) 
    } 
+0

傳遞的那個替換舊的空白UIView。事情是,我在一個UIView裏面,所以你談論的這些方法是不可用的我。 – Rialcom

+0

但是你肯定有某種'UIViewController'?在'viewDidLayoutSubviews()'中調用的'UIView'中創建一個設置角半徑的函數。 – Christoph

+0

我發現這個問題,在uiview類初始化程序中我重寫了框架,所以我只是在討論中調用uiview時傳遞框架。 – Rialcom