use*_*503 23 objective-c ios swift today-extension ios10
我正在构建一个iOS Today小部件,在测试iOS 10时,我注意到所有小部件现在都被赋予相同的高度(之前的版本允许开发人员设置高度).什么是理想高度/处理这个新限制的最佳做法是什么?我很快,我没有使用autolayout fyi.提前致谢!
yys*_*yys 44
在iOS 10中,默认情况下,今天窗口小部件的高度是固定的.此外,折叠小部件的最小高度是有限的.
折叠小部件是大约两个半表行的高度.理想情况下,扩展的小部件不会高于屏幕的高度.
这些说明来自iOS人机界面指南.
我们可以执行以下操作来更改它.
首先,您需要在您的代码中添加这些代码viewDidLoad
,这使得您的小部件支持两种iOS 10中的新模式.
if #available(iOSApplicationExtension 10.0, *) { // Xcode would suggest you implement this.
extensionContext?.widgetLargestAvailableDisplayMode = .expanded
} else {
// Fallback on earlier versions
}
Run Code Online (Sandbox Code Playgroud)
self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded;
Run Code Online (Sandbox Code Playgroud)
然后实现协议方法,如:
@available(iOSApplicationExtension 10.0, *)
func widgetActiveDisplayModeDidChange(activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
if activeDisplayMode == .expanded {
preferredContentSize = CGSize(width: 0.0, height: 200.0)
} else if activeDisplayMode == .compact {
preferredContentSize = maxSize
}
}
Run Code Online (Sandbox Code Playgroud)
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize {
if (activeDisplayMode == NCWidgetDisplayModeExpanded) {
self.preferredContentSize = CGSizeMake(0.0, 200.0);
} else if (activeDisplayMode == NCWidgetDisplayModeCompact) {
self.preferredContentSize = maxSize;
}
}
Run Code Online (Sandbox Code Playgroud)
运行目标,您将在窗口小部件的右上角看到"显示更多"按钮.点按它,您将看到更改.
查看更多细节:如何调整iOS 10中小部件的高度?
iOS 10中的小部件已经根据您的注意进行了更改,并且现在具有固定的高度.今天的扩展还增加了新功能.对他们来说就是NCWidgetDisplayMode
.基本上你在右上角有一个按钮,你可以"显示更多"或"显示更少".
首先将以下内容添加到您的 viewDidLoad()
self.preferredContentSize = CGSize(width: 0, height: 200)
if #available(iOSApplicationExtension 10.0, *) {
self.extensionContext?.widgetLargestAvailableDisplayMode = .expanded
} else {
// Fallback on earlier versions
}
Run Code Online (Sandbox Code Playgroud)
你需要做的是基本上添加以下方法:
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
}
}
Run Code Online (Sandbox Code Playgroud)
Objective-C版本:
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize{
if (activeDisplayMode == NCWidgetDisplayModeCompact){
self.preferredContentSize = CGSizeMake(0.0, 200.0);
}
else if (activeDisplayMode == NCWidgetDisplayModeExpanded){
self.preferredContentSize = desiredSize;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意两件事:
Xcode会自动建议您添加iOS版本的可用检查(至少对于Swift).所以不要删除旧的方法来执行此操作 self.preferredContentSize = CGSizeMake...
.旧的iOS版本仍然需要这样做.
当您从"显示更多">"显示更少"时,将调用该widgetActiveDisplayModeDidChange
函数activeDisplayMode == NCWidgetDisplayMode.Compact
.这是因为它立即从iOS系统触发.activeDisplayMode == NCWidgetDisplayMode.Expanded
当你从"显示更少">"显示更多"时,将被调用.
最后一件事,这仍然是"显示更多"和"显示更少"按钮,而苹果还没有修复它.查看 Apples Keynote 的演示,您会发现他遇到了这个bug问题.
归档时间: |
|
查看次数: |
9689 次 |
最近记录: |