如何隐藏或删除 Apple Watch 状态栏中的时间?

How to hide or remove the time from the Apple Watch status bar?

如何在我的应用程序的 Apple Watch 状态栏屏幕上隐藏或移除小时钟?

我在网上搜索了这个,但一无所获!

我刚发现如果你删除那个时钟,苹果会拒绝你的应用程序,但我的应用程序本身就是一个表盘,不需要显示那个时间。

正如您所指出的,试图从状态栏中隐藏或删除时间将导致您的应用被拒绝。

目前还没有办法完成您想做的事情,因为 Apple 不允许开发人员创建自定义表盘(即使在 watchOS 3 中也是如此)。

更新:

供您参考,状态栏上不显示时间的唯一情况是模式演示文稿同时具有左右栏按钮标题。这通常不会发生,但会在听写过程中发生——文本输入控制器在左侧显示 Cancel 按钮,在左侧显示 Done 按钮状态栏右侧。

虽然破解栏标题(或使用私人API)不会让您的应用获得批准,但您可能会研究 "hiding" 状态栏本身的方法,或任何其他不显示时间的模态视图的正确标题。

我只是指出这些事情,以防您只是想制作一个特定的应用程序供自己使用。由于 Apple 会拒绝违反其要求的应用程序,因此我不鼓励您浪费时间尝试制作您知道会被拒绝的应用程序。

居然找到了一种方法来隐藏 Github open-source project 上的时间叠加层。

这是如何完成的(在 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 上,可以通过覆盖 CLKTimeFormatertimeText 方法来实现。 与其他方法一样,这是私有的 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 @" "; }));
    }
}

@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

Ofc 不要尝试在生产中使用它。

这是 using Swift and Dynamic。 (watchOS 7+)

let app = Dynamic.PUICApplication.sharedPUICApplication()
app._setStatusBarTimeHidden(true, animated: false, completion: nil)

这是在使用私有 API,避免在 App Store 的应用中使用它。不过,有个窍门...

据我所知,唯一隐藏时钟的 App Store 应用是 Clockology。它使用可从外部来源获得的 .clock 文件,该 .clock 文件使角落里的时钟不可见(可能通过调用应用程序中已存在的函数,包含与上述类似的代码)。