添加SubView时无法修改视图元素的技术问题咨询
编程加载XIB作为Subview的实现方案
我最近完成了一个需求:手里有4个.XIB文件,需要通过代码把它们分别初始化为UIView实例,再添加到主视图上。下面是我针对其中一个XIB的具体实现步骤和代码:
核心实现代码
首先是初始化XIB并配置视图适配的逻辑:
// 初始化副学士学位选择UIView并准备约束 degreeAuditAssociatesView = instanceFromNib(XIBFilename: "degreeAuditAssociate") degreeAuditAssociatesView?.frame = self.view.bounds degreeAuditAssociatesView?.autoresizingMask = [UIView.AutoresizingMask.flexibleWidth, UIView.AutoresizingMask.flexibleHeight] loadSavedCheckboxes() // 其他3个XIB的初始化逻辑可以直接复用这套流程 // 将配置好的视图添加到主视图 if let associatesView = degreeAuditAssociatesView { self.view.addSubview(associatesView) }
关键辅助方法
上面用到的instanceFromNib是我封装的一个工具方法,专门用来从XIB文件加载并返回UIView实例,代码如下:
func instanceFromNib(XIBFilename: String) -> UIView? { return UINib(nibName: XIBFilename, bundle: nil).instantiate(withOwner: nil, options: nil).first as? UIView }
细节说明
- 设置
frame = self.view.bounds是让子视图初始尺寸和主视图完全匹配 - 配置
autoresizingMask为flexibleWidth和flexibleHeight,是为了让子视图能跟随主视图的尺寸变化自动适配 loadSavedCheckboxes()是我项目里用来恢复之前保存的复选框状态的自定义方法,你可以根据自己的业务需求替换成对应的初始化逻辑
内容的提问来源于stack exchange,提问作者Cristian325
相关产品推荐
相关产品推荐

