在iOS開發過程中,我們經常需要自定義視圖,視圖的內容一般都是固定的提示,包含一些文字、按鈕等等。當需要顯示的時候,一般需要固定視圖的大小,不需要根據屏幕大小做調整,不論是在屏幕較小的手機上,還是在屏幕較大的iPad上面,顯示都需要效果一樣。
比如我們需要在屏幕中間彈出以下提示框:
以上彈出框在低分辨率的手機上顯示沒有問題,但是在高分辨率的時候就會出現問題,登錄按鈕被遮擋,原因就是由於第二個設備的分辨率較高,而我們顯示視圖的時候是會指定視圖大小,在不同分辨率的屏幕上就會顯示高度不同,導致到分辨率設備顯示不全
以上視圖是在xib中設計的,視圖中的控件位置和大小都是通過約束設置的,設計的時候每個設備都沒有問題,不會出現遮擋問題;在視圖中,最底下的登錄按鈕並沒有設置底部約束,如果通過設置底部約束,可以避免登錄按鈕顯示在視圖范圍內,但是會遮擋中間的文字,所以我們有必要在視圖顯示時調整視圖大小。
那么我們在哪里調整視圖大小呢?在 layoutSubviews 中根據登錄按鈕的底部位置和高度調整當前視圖的高度:視圖高度 = self.signInButton.frame.origin.y + self.signInButton.frame.size.height + 16.0,具體代碼如下:
override func layoutSubviews() { super.layoutSubviews() // 調整視圖大小 self.frame = CGRect.init(x: self.frame.origin.x, y: self.frame.origin.y, width: self.frame.size.width, height: self.signInButton.frame.origin.y + self.signInButton.frame.size.height + 16.0) }
通過以上代碼即可調整視圖的大小,使得視圖顯示正常。