2016-02-20 48 views
1

如何檢索計算出的高度/寬度UIView是使用NSConstraint表示的高度和/或寬度?使用約束獲取uiview的高度/寬度

爲了解釋不同的: 我想檢索元件後UIView's「寬度」或「高度」的CGFloat值已被佈置使用自動佈局和約束。

+0

您是否想通過自動佈局和約束獲取更新後的高度/寬度? –

+0

請重新檢查您的問題描述。看起來像一些語法問題。 –

+0

@HarshalBhavsar是的,正好。 –

回答

1

這裏是你如何可以根據視圖

let adjustedWidth = anyView.intrinsicContentSize.width 
let adjustedHeight = anyView.intrinsicContentSize.height 
+0

啊輝煌。給它一個鏡頭。 –

+0

請標記接受,如果它工作 –

+0

嗯。不知道它是否完美。我將寬度和高度設置爲UITextField的200和100。儘管intrinsicContentSize返回(112,21)。 –

2

還有就是當你確信沒有特定的點你的看法佈局系統完全佈置的內容得到高度& widht。但是在每個佈局週期後都會調用一些方法。

所以,如果你是textField自定義類或部分定製UIView的,就像一個UITableViewCell,這種方法是layoutSubviews。在這種護理,你可以用下面的代碼獲得大小:

override func layoutSubviews() { 
    super.layoutSubviews() 
    textWidth = textField.frame.width 
    textHeight = textField.frame.height 
} 

此代碼會給你正確的價值觀,每次有新的變化在他們佈局(如方向變化或一些其他元素改變了他們的框架或約束)。

如果您沒有自定義視圖,但是您在UIViewController中直接使用textField,則方法爲viewDidLayoutSubviews。這在viewController完成整個視圖層次結構的佈局後被調用。

override func viewDidLayoutSubviews() { 
    super.layoutSubviews() 
    textWidth = textField.frame.width 
    textHeight = textField.frame.height 
} 

讓我知道如果我可以幫你進一步,或者如果您有更多的問題。希望這有助於您的實施。

0

提供視圖約束,你可以用得到它的「裝修」的大小:

let size = view.systemLayoutSizeFitting(UILayoutFittingCompressedSize) 

如果你得到無效的值,那麼你的觀點並沒有限制,或者你叫它其父一直laid-前出。