iOS 11中如何调整Today Extension小组件的高度?
iOS 11 调整Today Extension(小组件)高度的正确做法
我来帮你解决这个小组件高度调整的问题~你当前的代码里有个关键设置放错了位置,导致高度没法正常生效,咱们一步步来修正:
首先,你把开启展开模式的代码放在了didReceiveMemoryWarning方法里——这个方法只有在App收到内存警告时才会触发,所以你的小组件初始化时根本没开启「支持展开」的能力,自然没法调整高度。正确的做法是把这个设置移到viewDidLoad里,让小组件一启动就知道可以切换到展开状态:
override func viewDidLoad() { super.viewDidLoad() // 初始化时就开启支持紧凑/展开两种模式 self.extensionContext?.widgetLargestAvailableDisplayMode = .expanded }
然后你的widgetActiveDisplayModeDidChange方法逻辑是对的,不过可以优化下写法,让宽度直接沿用系统给定的最大值,避免出现适配问题:
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) { if activeDisplayMode == .compact { // 紧凑模式下使用系统默认的最大尺寸 preferredContentSize = maxSize } else { // 展开模式下设置自定义高度,这里的200可以替换成你需要的数值 preferredContentSize = CGSize(width: maxSize.width, height: 200) } }
最后再补充几个注意点:
- 确保你的小组件Auto Layout约束是正确的,约束冲突会导致设置的高度不生效;
- 展开模式下的高度有系统上限(不同设备略有差异,一般不超过600),超过的话会被系统自动截断;
- 如果你的内容是动态加载的(比如网络请求数据),记得在内容更新后重新设置
preferredContentSize,让高度跟着内容变化。
这样调整后,你的小组件就能正常切换紧凑/展开模式,并且在展开状态下显示你想要的高度啦~
内容的提问来源于stack exchange,提问作者まるまる
相关产品推荐
相关产品推荐

