You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 23:48:49