Got*_*chi 38 ios xcode6 ios8 ios-app-extension
如何在通知中心更改应用程序今日扩展程序的高度?
我尝试使用Interface Builder和Code,Interface Builder显示高度为600的视图,但它没有在设备上应用此高度.
看起来我不能让它大于80像素......
San*_*aus 76
在您的小部件UIViewController.m
(Objective-C)中:
self.preferredContentSize = CGSizeMake(0, 200);
Run Code Online (Sandbox Code Playgroud)
将使您的小部件高度为200.
请注意,宽度对视图没有影响,因为窗口小部件必须符合通知中心的确切宽度,这是自动处理的.
此外,如果要对视图高度的更改进行动画处理,可以实现(Objective-C):
- (void)viewWillTransitionToSize:(CGSize)size
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
Run Code Online (Sandbox Code Playgroud)
在您的视图控制器中使用 -animateAlongsideTransition:completion:
答案有点隐藏; 您必须在文档侧栏中单击以最终找到这个奇妙的文档.
lxt*_*lxt 16
小部件的高度由系统调整.如果您使用约束定义了高度,则会根据需要自动调整.如果您使用显式布局,则可以通过修改preferredContentSize
窗口小部件来请求新的高度.
请注意,您没有保证通知中心会尊重您的身高要求:它可能会自动调整,可能会调整但不会达到您想要的确切高度,或者可能根本不受尊重.
开发窗口小部件的最佳方法是使用自动布局约束来设置高度值,这样您的窗口小部件就可以轻松适应不同的高度.
Lio*_*ion 15
由于iOS 10扩展的高度为110像素.您应该使用新的协议方法widgetActiveDisplayModeDidChange:withMaximumSize:
来扩展扩展大小(Objective-C):
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode
withMaximumSize:(CGSize)maxSize {
if (activeDisplayMode == NCWidgetDisplayModeExpanded) {
self.preferredContentSize = CGSizeMake(maxSize.width, 600.0);
} else if (activeDisplayMode == NCWidgetDisplayModeCompact) {
self.preferredContentSize = maxSize;
}
}
Run Code Online (Sandbox Code Playgroud)
此外,您可能需要setWidgetLargestAvailableDisplayMode:
在今天的视图控制器的viewDidLoad
方法中调用您的扩展上下文(Objective-C):
if ([self.extensionContext respondsToSelector:@selector(setWidgetLargestAvailableDisplayMode:)]) { // iOS 10+
[self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeExpanded];
} else {
self.preferredContentSize = CGSizeMake(0, 600.0); // iOS 10-
}
Run Code Online (Sandbox Code Playgroud)
这个主题可能会有所帮助https://forums.developer.apple.com/thread/48930
小智 10
最好的方法当然是Autolayout,但默认情况下你可以像这样控制边距
func widgetMarginInsetsForProposedMarginInsets
(defaultMarginInsets: UIEdgeInsets) -> (UIEdgeInsets) {
return UIEdgeInsetsZero
}
Run Code Online (Sandbox Code Playgroud)
有两种方式可以显示今天的扩展:
无论您在紧凑模式下更改扩展高度所做的代码都没有任何区别.因此,您需要将模式从紧凑模式更改为扩展模式.
// 1. Load This in viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.expanded
}
// 2. Implement another widget protocol
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize){
if (activeDisplayMode == NCWidgetDisplayMode.compact) {
self.preferredContentSize = maxSize;
}
else {
self.preferredContentSize = CGSize(width: 0, height: 200);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以参考WWDC以获取有关App扩展的更多更新
归档时间: |
|
查看次数: |
34273 次 |
最近记录: |