【问题标题】:Today Widget Extension Height - iOS10今日小部件扩展高度 - iOS10
【发布时间】:2017-03-31 21:32:22
【问题描述】:

无法为紧凑模式设置今日小部件视图模式的高度。无论我设置什么值。它将小部件的高度设置为默认值。扩展模式完美运行,并且该值已正确设置并反映在小部件中。 我已经在 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 是小部件的最小高度。
  • @ConstantinSaulenco 谢谢 - 但我怎样才能改变这个值。
  • 在紧凑模式下无法更改该值

标签: ios swift today-extension ios10-today-widget


【解决方案1】:

解决方案是在 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】:

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

    【讨论】:

    • iOS 10+ 中小部件的高度是根据系统文本大小而变化的。 110 是默认/中等文本大小的高度,但如果您在“设置”应用中减小或增加系统文本大小,它可以小于或大于 110。
    • 这个答案实际上并没有涵盖所有的州。它应该与@GregG 评论合并:)
    • 以后我不会再用这个方法了,请看我的回答
    【解决方案3】:

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

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

    无论当前显示模式如何,要分别获得展开和压缩的最大高度,请执行以下操作:

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

    【讨论】:

      猜你喜欢
      • 2014-07-25
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多