在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.ad8height + 16.0)}
通过以上代码即可调整视图的大小,使得视图显示正常。