如何隐藏或删除Apple Watch状态栏屏幕上的小时钟?
我在网上搜索了这个,但什么也没找到!
我刚刚发现,如果你删除那个时钟,苹果会拒绝你的应用程序,但我的应用程序本身就是一个表盘,不需要显示那个时间
正如你所指出的,试图隐藏或删除状态栏的时间会导致你的应用被拒绝。
没有办法完成你想做的事情,因为苹果不允许开发者创建自定义表盘(即使在watchOS 3中)。
更新:
为您提供信息,时间不出现在状态栏上的唯一情况是当模态表示同时具有左栏和右栏按钮标题时。这通常不会发生,但在听写过程中会发生——文本输入控制器在左侧显示Cancel按钮,在状态栏右侧显示Done按钮。
虽然修改状态栏标题(或使用私有API) 不会让你的应用通过,你可能会寻找一种"隐藏"状态栏本身的方法,或者任何其他不显示时间的模态视图的正确标题。
我只是指出这些事情的情况下,你只是想做一个特定的应用程序为自己使用。因为苹果会拒绝违反他们要求的应用,所以我不鼓励你浪费时间去开发一个你知道会被拒绝的应用。
这是gasamtanz使用Swift和Dynamic的答案。(watchOS 7 +)
let app = Dynamic.PUICApplication.sharedPUICApplication()
app._setStatusBarTimeHidden(true, animated: false, completion: nil)
这是使用私有API,避免在应用商店的应用程序中使用它。然而,有一个技巧…
我所知道的唯一一个隐藏时钟的App Store应用是Clockology。它使用了一个可以从外部源获得的.clock文件,这个.clock文件使角落里的时钟不可见(可能通过调用应用中已经存在的函数,包含类似于上面的代码)。
@Jesús A. Álvarez的答案在watchOS 6上不适合我。我用的是:
@interface PUICApplication : NSObject
+ (instancetype)sharedPUICApplication;
- (void)_setStatusBarTimeHidden:(_Bool)arg1 animated:(_Bool)arg2 completion:(void (^)(void))arg3;
@end
@implementation TSWatchKitExtension
+(void)hideClockTime {
PUICApplication * application = [NSClassFromString(@"PUICApplication") sharedPUICApplication];
[application _setStatusBarTimeHidden:YES
animated:NO
completion: nil];
}
@end
请不要在生产环境中使用
实际上找到了一种方法来隐藏Github开源项目上的时间覆盖。
这是如何完成的(在Objc中):
#import "InterfaceController.h"
#import "FaceScene.h"
@import ObjectiveC.runtime;
@import SpriteKit;
@interface NSObject (fs_override)
+(id)sharedApplication;
-(id)keyWindow;
-(id)rootViewController;
-(NSArray *)viewControllers;
-(id)view;
-(NSArray *)subviews;
-(id)timeLabel;
-(id)layer;
@end
@implementation InterfaceController
- (void)didAppear
{
/* Hack to make the digital time overlay disappear */
NSArray *views = [[[[[[[NSClassFromString(@"UIApplication") sharedApplication] keyWindow] rootViewController] viewControllers] firstObject] view] subviews];
for (NSObject *view in views)
{
if ([view isKindOfClass:NSClassFromString(@"SPFullScreenView")])
[[[view timeLabel] layer] setOpacity:0];
}
}
@end
在watchOS 6上,可以通过重写CLKTimeFormater
的timeText
方法来实现。与其他方法一样,这是私有API,所以你不应该在你打算发布的应用程序上使用它。
+ (void)hideTime {
Class CLKTimeFormatter = NSClassFromString(@"CLKTimeFormatter");
if ([CLKTimeFormatter instancesRespondToSelector:@selector(timeText)]) {
Method m = class_getInstanceMethod(CLKTimeFormatter, @selector(timeText));
method_setImplementation(m, imp_implementationWithBlock(^NSString*(id self, SEL _cmd) { return @" "; }));
}
}