如何使用CGRect编程实现UIImage在父视图内垂直居中
使用纯CGRect实现UIImage在父视图中居中的方案
你当前代码位置偏移的核心原因是CGRect的x、y值写死为100、200的固定数值,不同iPhone机型的屏幕宽高不一致,固定坐标无法适配不同尺寸的设备,自然会出现位置偏移。
正确实现代码
完全基于CGRect动态计算居中坐标的实现如下:
func configure() { //MARK: Logo Image view.addSubview(logo) logo.image = UIImage(named: "cafelogo") logo.layer.cornerRadius = 25 // 定义logo固定尺寸 let logoSize: CGFloat = 150 // 基于父视图bounds动态计算居中坐标 let centerX = (view.bounds.width - logoSize) / 2 let centerY = (view.bounds.height - logoSize) / 2 logo.frame = CGRect(x: centerX, y: centerY, width: logoSize, height: logoSize) }
注意事项
- 不要在
viewDidLoad生命周期内调用上述布局代码,此时控制器view尚未完成最终的尺寸适配,计算出的bounds不准确。请将configure的调用放在viewDidLayoutSubviews生命周期中,保证拿到的父视图尺寸是当前设备对应的准确值。 - 如果仅需要垂直居中、不需要水平居中,可以保留y坐标的动态计算逻辑,x坐标替换为你需要的自定义值即可。
- 如果页面支持横竖屏切换,需要在屏幕旋转触发的布局回调中重新执行上述frame计算逻辑,保证旋转后logo依然保持居中。
内容的提问来源于stack exchange,提问作者Rahmetullah Ibragimov
相关产品推荐
相关产品推荐

