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

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,提问作者まるまる

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:26:39