今日小部件扩展高度 - iOS10

21
今日小组件视图模式的高度无法在紧凑模式下设置,无论我设置什么值。它会将小部件的高度设置为默认值。展开模式运作完美,并且值已正确设置并反映在小部件中。 我已经在viewDidLoad()方法中添加了此行代码。
self.extensionContext?.widgetLargestAvailableDisplayMode = .expanded

这里是代码。maxSize的值也不能更改,因为它是一个常量。

func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {

        //self.preferredContentSize = (activeDisplayMode == .compact) ? maxSize : CGSize(width: maxSize.width, height: 300)

        if activeDisplayMode == NCWidgetDisplayMode.compact
        {
             self.preferredContentSize = CGSize(width: maxSize.width, height: 300)
        }
        else
        {
            self.preferredContentSize = CGSize(width: maxSize.width, height: 560)
        }
}

在紧凑模式下,小部件的最小高度为110。 - Constantin Saulenco
@ConstantinSaulenco 谢谢 - 但我该如何更改这个值。 - Taimur Ajmal
1
在紧凑模式下无法更改该值。 - Constantin Saulenco
3个回答

25

iOS 10中小部件在紧凑模式下的高度恰好为110。在展开模式下,可以将其设置为任何想要的高度,但在紧凑模式下,它始终为110,无法覆盖。


23
在iOS 10及以上版本中,小部件的高度是基于系统文本大小可变的。默认/中等文本大小下高度为110,但如果在“设置”应用中减小或增大系统文本大小,则高度可以小于或大于110。 - Greg G
6
这个答案实际上并没有涵盖所有的情况。应该与@GregG的评论合并 :) - ridvankucuk
我不会再使用这种方法,请查看我的答案。 - MobileMon

17

解决方法是在viewDidLoad方法中设置preferredContentSize

这是一个示例:

Swift 3及以上版本

override func viewDidLoad() {

    super.viewDidLoad()
    
    self.preferredContentSize = CGSize(width:self.view.frame.size.width, height:210)
    
    if #available(iOSApplicationExtension 10.0, *) {
        self.extensionContext?.widgetLargestAvailableDisplayMode = .expanded
    }
}


 @available(iOS 10.0, *)
    @available(iOSApplicationExtension 10.0, *)
    func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
        if activeDisplayMode == .expanded {
            self.preferredContentSize = CGSize(width: self.view.frame.size.width, height: CGFloat(3)*self.tableView.rowHeight)
        }else if activeDisplayMode == .compact{
            self.preferredContentSize = CGSize(width: maxSize.width, height: 110)
        }
    }

警告

您应该使用适合您情况的特定高度。110是在我的情况下有效的。

希望这能解决您的问题。

祝好


2

要获取小部件活动显示模式的最大高度,请在您的UIViewController中执行以下操作

获取小部件活动显示模式的最大高度,请按以下步骤操作:

let context = self.extensionContext
if let context = context{
    let height = context.widgetMaximumSize(for: context.widgetActiveDisplayMode).height
}

要分别获取展开和折叠状态下的最大高度,而不考虑当前的显示模式,请按照以下步骤操作:

Original Answer翻译成"最初的回答"

var context = self.extensionContext
if let context = context{
    let compactHeight = context.widgetMaximumSize(for: .compact).height
    let expandedHeight = context.widgetMaximumSize(for: .expanded).height
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接