通过将iOS 9今天的扩展转换为iOS 10来解决尺寸问题

Bee*_*eam 2 sizing ios swift today-extension ios10

晚上好!

通过了解今天的扩展我有很大的问题.我已经阅读了很多教程和介绍,但没有任何帮助我理解这个问题.在iOS 9上,扩展工作正常 - 在iOS 10上没有.

我的主要问题是iOS 10中小部件的自动调整大小(?).在iOS 9上,小部件以纵向和横向完美显示我的桌面视图 - iOS 10崩溃了该组织并打破了视图.关于StackOverflow的问题只有这样的答案:https://stackoverflow.com/a/38009125

但我不会显示"更多"/"更少"的按钮.我的扩展程序应该只在特定的高度显示我的tableView,而不是更多,而不是更少.

我用来测试的今天扩展(如果它有效,我将用表视图构建一个类似的扩展)是:https://github.com/maximbilan/iOS-Today-Extension-Simple-Tutorial(这不是我的代码 - 我很高兴出版商的工作!)

以下是问题的两张图片(1. iOS 9,2.iOS 10):

iOS 9:工作

iOS 10:错误

我不明白是什么问题.我设置了高度,self.preferredContentSize.height = 200但iOS 10不使用像iOS 9那样的高度.上面的StackOverflow答案不是解决方案,因为我不会更多/更少的按钮.虽然我使用了更多/更少按钮的代码,但紧凑的大小中存在问题:

// ViewDidLoad
if #available(iOSApplicationExtension 10.0, *) {
        self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.expanded
    } else {
        self.preferredContentSize.height = 200
    }

// method in File
@available(iOSApplicationExtension 10.0, *)
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
    if (activeDisplayMode == NCWidgetDisplayMode.compact) {
        self.preferredContentSize = maxSize
    }
    else {
        self.preferredContentSize = CGSize(width: maxSize.width, height: 200)
    }
}
Run Code Online (Sandbox Code Playgroud)

正如我上面所说 - 这个代码仅在按下窗口小部件时显示"显示更多"...如果未按下按钮且窗口小部件尺寸紧凑,它看起来就像上面的图像.

我希望任何人都可以帮助我,因为这是我很长一段时间的问题,而且我找不到关于iOS 10上今天小部件的足够资料.

谢谢!

Rob*_*Rob 6

是的我有同样的问题.我用widgetActiveDisplayModeDidChange解决了它,我在viewDidLoad Swift 3中调用它

func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
    self.preferredContentSize = (activeDisplayMode == .expanded) ? CGSize(width: 500, height: 230) : CGSize(width: maxSize.width, height: 110)
}

override func viewDidLoad() {
    super.viewDidLoad()

     self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.expanded

    widgetActiveDisplayModeDidChange(.compact, withMaximumSize: CGSize(width: 500, height: 230))

}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述