【问题标题】:Size problems by converting iOS 9 today extension to iOS 10通过将今天的 iOS 9 扩展转换为 iOS 10 的大小问题
【发布时间】:2016-10-08 20:16:25
【问题描述】:

晚上好!

通过了解今天的扩展,我遇到了很大的问题。我已经阅读了很多教程和介绍,但没有任何帮助我理解这个问题。在 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):

我不明白是什么问题。我使用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)
    }
}

正如我上面所说的 - 此代码仅在小部件被按下为“显示更多”时才有效......如果未按下按钮并且小部件尺寸紧凑,它看起来像上图。

我希望任何人都可以帮助我,因为这是我长期以来一直遇到的问题,我没有找到足够的关于 iOS 10 上今天的小部件的材料。

谢谢!

【问题讨论】:

    标签: ios swift ios10 today-extension sizing


    【解决方案1】:

    是的,我有同样的问题。我用 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))
    
    }
    

    【讨论】:

      【解决方案2】:

      这就是今天扩展的 iOS 10 行为。它需要一个固定的高度,对于所有小部件都相同,如果你想显示更多,你必须有那个更多的按钮。您还可以设置小部件的默认显示(扩展或紧凑):https://developer.apple.com/reference/notificationcenter/ncwidgetdisplaymode

      【讨论】:

      • 感谢您的回答!我对此有两个问题:1.如何将扩展的高度作为双值?因此,如果空间不够,我可以删除表格视图的行... 2. 在我的私人设备上,我有很多扩展(如 Amazon / WhatsApp),它们的大小相同,但没有一个按钮。为什么要更改 iOS 10 而不是这些扩展的大小?
      • 或者我可以使用widgetActiveDisplayModeDidChange 方法的maxSize 值吗?
      • 1.小部件的紧凑高度由 Apple 固定(我不记得尺寸,我认为所有 iPhone 都一样,没有寻找 iPad)您可以通过使用自动布局设置视图轻松获得该高度所有的高度,并显示一个高度在 2 以内的标签。手机上的应用程序尺寸大于 Apple 定义的没有任何按钮的应用程序可能不会更新(深灰色背景)。
      • WidgetActiveDisplayModeDidChange 会告诉你显示模式何时改变,这是改变你的 UI 以适应紧凑和扩展模式的唯一方法(如果你允许扩展,你应该使用它)
      猜你喜欢
      • 2018-01-01
      • 2017-02-07
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 2014-10-13
      • 2017-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多