2017-02-13 90 views
0

我希望我的堆棧視圖有三個視圖:紅色圖像,藍色圖像和註冊視圖。問題是,雖然紅色和藍色按鈕顯示得很好,但註冊視圖不會顯示。其中一個堆棧視圖的子視圖根本沒有顯示

enter image description here

這是我如何設置,並把我的視圖控制器視圖中我的籌碼觀點:

func setupSocialStackView() { 
    let socialStackView = UIStackView(arrangedSubviews: redImage, blueImage, registerView]) 
    socialStackView.axis = .vertical 
    socialStackView.distribution = .fillProportionally 
    view.addSubview(socialStackView) 
    socialStackView.spacing = 8 

    // NSLayoutAnchor constraints here to place stack view 
    // inside my view controller view 
} 

這是我的註冊視圖不顯示的代碼:

lazy var registerView: UIView = { 
    let containerView = UIView() 

    // Register button 
    let registerButton = UIButton(type: .system) 
    registerButton.setTitle("Register", for: .normal) 
    registerButton.titleLabel?.font = UIFont.systemFont(ofSize: 12, weight: UIFontWeightLight) 
    registerButton.titleLabel?.textAlignment = .center 
    registerButton.setTitleColor(UIColor.black, for: .normal) 
    registerButton.titleLabel?.textColor = UIColor(r: 91, g: 90, b: 90) 
    registerButton.addTarget(self, action: #selector(presentRegisterController), for: .touchUpInside) 
    containerView.addSubview(registerButton) 

    return containerView 
}() 

其他兩個排列視圖的堆棧視圖是UIImageView s。

爲什麼那裏的兩個圖像和寄存器視圖不是?我錯過了什麼嗎?

+0

你可以顯示視圖的約束條件嗎? – Ocunidee

+1

默認情況下,'UIView'沒有'intrinsicContentSize',所以要將它與縱軸上的'UIStackView'一起使用,需要添加高度約束。因爲它是堆棧視圖設置您的註冊視圖的高度爲0. – beyowulf

回答

1

你似乎沒有給你的UIButton一個幀大小。看看你是否添加autoresizingMask線你會得到什麼:

registerButton.addTarget(self, action: #selector(presentRegisterController), for: .touchUpInside) 

    registerButton.autoresizingMask = [.flexibleWidth, .flexibleHeight] 

    containerView.addSubview(registerButton) 
1

它看起來像你正在製作一個UIView的子類,以顯示一個按鈕說「註冊?」。這太複雜了,UIButton已經是UIView的子類了,所以你需要做的就是將註冊按鈕直接添加到你的stackview中!希望有幫助

+0

我實際上想要添加更多的東西到註冊視圖,而不僅僅是一個按鈕。謝謝您的回答。 – Cesare

+0

好的,爲什麼你的註冊UIView裏有一個容器UIView?只需將註冊按鈕添加到self.addSubview。同樣如@beyowulf所說,如果你添加一個UIView到堆棧,它不知道它應該有多大,所以你需要給視圖一個高度約束,或者你可以限制你的註冊按鈕到註冊視圖(使用自動佈局,而不是框架),所以你註冊的視圖知道它的內容有多大。 – Florensvb

1

的觀點,即沒有顯示出來是容器UIView,其中有沒有內在的大小。在lazy var塊內部,將registerButton的邊緣限制爲containerView,以便容器視圖具有大小。

0

首先將所有3個視圖添加到堆棧視圖。設置其間距分佈從屬性檢查器從右側.eg(spacing = 10,distribution = fill equality)。現在選擇堆棧視圖並添加相應的約束。

你可以試試這個。

0

對我來說,我需要爲堆棧視圖內的視圖添加底部,右側和左側約束。然後它出現了。