Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
新的iOS10Today小部件/扩展的高度是多少?_Ios_Objective C_Swift_Ios10_Today Extension - Fatal编程技术网

新的iOS10Today小部件/扩展的高度是多少?

新的iOS10Today小部件/扩展的高度是多少?,ios,objective-c,swift,ios10,today-extension,Ios,Objective C,Swift,Ios10,Today Extension,我正在构建一个iOSToday小部件,在测试iOS10时,我注意到所有小部件现在都被赋予了相同的高度(以前的版本允许开发人员设置高度)。什么是理想高度/处理这一新限制的最佳实践是什么?我在swift,我没有使用自动布局供参考。提前谢谢 在iOS 10中,默认情况下,“今日”窗口小部件的高度是固定的。此外,折叠小部件的最小高度是有限的 折叠的小部件大约是两个半表格行的高度。理想情况下,扩展小部件的高度不超过屏幕的高度 这些笔记是我的 我们可以执行以下操作来更改它 首先,您需要在您的viewDidL

我正在构建一个iOSToday小部件,在测试iOS10时,我注意到所有小部件现在都被赋予了相同的高度(以前的版本允许开发人员设置高度)。什么是理想高度/处理这一新限制的最佳实践是什么?我在swift,我没有使用自动布局供参考。提前谢谢

在iOS 10中,默认情况下,“今日”窗口小部件的高度是固定的。此外,折叠小部件的最小高度是有限的

折叠的小部件大约是两个半表格行的高度。理想情况下,扩展小部件的高度不超过屏幕的高度

这些笔记是我的

我们可以执行以下操作来更改它

首先,您需要在您的
viewDidLoad
中添加这些代码,这使得您的小部件支持iOS 10中新增的两种模式

Swift版本: ObjC版本: 然后实现协议方法,如:

Swift版本: ObjC版本: 运行您的目标,您将在小部件的右角看到一个“显示更多”按钮。点击它,您将看到变化


请参阅更多详细信息:

iOS 10中的小部件已经如您所注意到的那样进行了更改,现在具有固定的高度。today扩展还增加了新功能。其中一个是
NCWidgetDisplayMode
。基本上,你在右上角有一个按钮,你可以“显示更多”或“显示更少”

首先将以下内容添加到
viewDidLoad()

然后您需要做的是基本上添加以下方法:

Swift版本:

@available(iOSApplicationExtension 10.0, *)
func widgetActiveDisplayModeDidChange(activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
    if activeDisplayMode == NCWidgetDisplayMode.Compact {
        self.preferredContentSize = CGSizeMake(0.0, 200.0)
    }
    else if activeDisplayMode == NCWidgetDisplayMode.Expanded {
        self.preferredContentSize = desiredSize
    }

}
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize{
    if (activeDisplayMode == NCWidgetDisplayModeCompact){
        self.preferredContentSize = CGSizeMake(0.0, 200.0);
    }
    else if (activeDisplayMode == NCWidgetDisplayModeExpanded){
        self.preferredContentSize = desiredSize;
    }
}
Objective-C版本:

@available(iOSApplicationExtension 10.0, *)
func widgetActiveDisplayModeDidChange(activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
    if activeDisplayMode == NCWidgetDisplayMode.Compact {
        self.preferredContentSize = CGSizeMake(0.0, 200.0)
    }
    else if activeDisplayMode == NCWidgetDisplayMode.Expanded {
        self.preferredContentSize = desiredSize
    }

}
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize{
    if (activeDisplayMode == NCWidgetDisplayModeCompact){
        self.preferredContentSize = CGSizeMake(0.0, 200.0);
    }
    else if (activeDisplayMode == NCWidgetDisplayModeExpanded){
        self.preferredContentSize = desiredSize;
    }
}
注意两件事:

@available(iOSApplicationExtension 10.0, *)
func widgetActiveDisplayModeDidChange(activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
    if activeDisplayMode == NCWidgetDisplayMode.Compact {
        self.preferredContentSize = CGSizeMake(0.0, 200.0)
    }
    else if activeDisplayMode == NCWidgetDisplayMode.Expanded {
        self.preferredContentSize = desiredSize
    }

}
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize{
    if (activeDisplayMode == NCWidgetDisplayModeCompact){
        self.preferredContentSize = CGSizeMake(0.0, 200.0);
    }
    else if (activeDisplayMode == NCWidgetDisplayModeExpanded){
        self.preferredContentSize = desiredSize;
    }
}
Xcode将自动建议您添加iOS版本的可用检查(至少对于Swift)因此,不要删除执行此操作的旧方法。
self.preferredContentSize=CGSizeMake…
对于较旧的iOS版本,仍然需要此方法

widgetActiveDisplayModeDidChange
函数中
activeDisplayMode==NCWidgetDisplayMode。当您从“显示更多”>转到“显示更少”时,将调用Compact
。这是因为它会立即从iOS系统触发。而
activeDisplayMode==NCWidgetDisplayMode。当您从“显示较少”>转到“显示较多”时,将调用Expanded


还有最后一件事,这是一种仍然带有“显示更多”和“显示更少”按钮的小车,苹果公司还没有修复它。从Apple Keynote中,您会注意到他对此存在bug问题。

只需执行以下操作:

let height = extensionContext?.widgetMaximumSize(for: .compact).height

您可以同时使用:
.compact
.expanded
类型。

谢谢您的完整指导!这真是一种很酷的方式。我寻找了很多,并尝试在生活中获得合适的大小,如ViewDidDisplay和viewWillTransition。但这些方法并不理想。因为在回调中设置正确的帧会导致小部件看起来刷新和重画,这是令人不愉快的。谢谢我可以用它在viewDidLoad中设置正确的帧。
let height = extensionContext?.widgetMaximumSize(for: .compact).height