Xcode 14 子视图Frame自动异常变更,求非Auto Layout解决方案
清理Storyboard缓存
关闭Xcode,通过Xcode偏好设置的「Locations」面板打开DerivedData路径,删除当前项目对应的缓存文件夹,重启Xcode打开项目。这能清除Xcode自动生成的错误布局缓存,避免加载旧的错误数据。锁定子视图Frame属性
在Storyboard里选中出错的子视图,打开右侧Size Inspector,找到Frame区域,点击数值旁的锁形图标,锁定X、Y、宽、高四个属性。锁定后Xcode重新加载时不会擅自修改这些布局数值。手动修正Storyboard的XML代码
右键目标Storyboard文件,选择「Open As -> Source Code」,找到对应子视图的<frame>标签,把被篡改的Y值(比如y="-2")改回正确值(比如y="0"),保存后再用Interface Builder打开。如果多个视图出现相同错误,还能借助文本编辑器的查找替换批量修正。将子视图拆分到独立XIB
把containerView下的子视图单独封装成XIB文件,在主控制器的代码里手动加载XIB并添加到containerView中。这种方式避开了大型Storyboard的布局解析bug,同时保留autoresizing模式的使用。关闭Xcode自动布局优化
在项目Build Settings中搜索「Auto Layout」相关选项,关闭「Enable Auto Layout for Storyboards」(不同Xcode版本选项名称可能略有差异),强制Xcode严格遵循autoresizing mask设置,禁止自动调整布局。
内容的提问来源于stack exchange,提问作者Hassy

