我已经为iOS 10实现了新的小部件,我使用以下代码为它设置了高度:
@available(iOSApplicationExtension 10.0, *)
func widgetActiveDisplayModeDidChange(activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
if activeDisplayMode == NCWidgetDisplayMode.Compact {
self.preferredContentSize = CGSizeMake(0.0, 350.0)
}
else if activeDisplayMode == NCWidgetDisplayMode.Expanded {
self.preferredContentSize = desiredSize
}
}
它工作正常,但我的问题是“显示更多”和“显示更少”按钮。它们并不总是响应,我经常不得不多次点击来触发它们。我错过了什么?我是否必须添加上述代码才能处理高度?
答案 0 :(得分:3)
我遇到了同样的问题,问题是即使小部件处于紧凑模式,我也更新了preferredContentSize
。
尝试检查更新preferredContentSize
的每个位置,并仅在if widgetActiveDisplayMode
为NCWidgetDisplayModeExpanded
答案 1 :(得分:3)
斯威夫特3:
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
if (activeDisplayMode == NCWidgetDisplayMode.compact) {
UIView.animate(withDuration: 0.25, animations: { () -> Void in
self.preferredContentSize = yourFixSize
}, completion: nil)
}
else {
UIView.animate(withDuration: 0.25, animations: { () -> Void in
self.preferredContentSize = yourMaxSize
}, completion: nil)
}
}
答案 2 :(得分:1)
有同样的问题,我发现当我们点击"显示更多" “显示较少”按钮,没有动画。所以你可以尝试添加这样的块:
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize {
if (activeDisplayMode == NCWidgetDisplayModeCompact) {
[UIView animateWithDuration:0.25f
animations:^{
self.preferredContentSize = yourFixSize; }];
}
else {
[UIView animateWithDuration:0.25f
animations:^{
self.preferredContentSize = yourMaxSize;
}];
}
}
我以这种方式修复了这个错误。
希望有用