2015-02-09 89 views
1

我想創建簡單的自定義視圖並將其用於navigationItem.titleView。我的自定義視圖非常簡單,只有圖像視圖和標籤:[image] - [label]。我有xib文件,我已經定義了所有約束條件(兩個子視圖都對superview有約束 - 我想要子視圖的高度和寬度決定整個自定義視圖的高度和寬度)。問題是,當我從xib這樣實例化視圖時:自定義UIView作爲navigationItem標題

class func titleViewWithTitle(title: String, icon: UIImage?) -> TitleView { 
     let titleView = NSBundle.mainBundle().loadNibNamed("TitleView", owner: self, options: nil).first as TitleView  
     titleView.title.text = title 
     titleView.icon.image = icon 
     titleView.layoutSubviews() 
     return titleView 
    } 

此視圖的大小不是由它的子項決定的。它具有在Interface Builder中手動設置的大小。我能做些什麼來強制視圖動態計算大小?

回答

2

在您的自定義視圖,重寫layoutSubviews方法,並添加這樣的:

CGSize targetSize = [self  systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 

製作此一CGRectFrame並將此幀作爲自我新幀(這是自定義視圖)。

這將基本上找到儘可能最小的框架,仍然以所有內容顯示的方式包含其內容。

注意:此自定義視圖的所有子視圖必須正確設置自動佈局抗壓力。即他們必須抵制萎縮。

+1

和偏離當然使用這個:)的快速變種 – 2015-02-09 15:07:22

+0

偉大的,它的工作! – MichalMoskala 2015-02-09 15:24:26

+0

我有想法:我可以實現'sizeToFits(size:CGSize)'並在該方法內返回方法'systemLayoutSizeFittingSize:UILayoutFittingCompressedSize'的結果。我試過這個,但是當我手工修改它的框架時,這個觀點更廣泛。你知道什麼是問題嗎? – MichalMoskala 2015-02-09 16:22:49