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

时间:2016-06-28 05:45:50

标签: user-interface watchkit apple-watch watch-os

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

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

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

5 个答案:

答案 0 :(得分:6)

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

由于Apple不允许开发人员创建自定义表盘(即使在watchOS 3中),也无法完成您想要做的事情。

<强>更新

有关您的信息,状态栏上未显示时间的唯一情况是模式演示文稿同时具有左侧和右侧栏标题。这通常不会发生,但会在听写期间发生 - 文本输入控制器在左侧显示取消按钮,在状态栏右侧显示完成按钮。

虽然黑客攻击标题(或使用私有API) 不会 让您的应用获得批准,但您可能会采用以下方式:隐藏&#34;状态栏本身,或任何其他模态视图的正确标题,并不会显示时间。

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

答案 1 :(得分:3)

@JesúsA.Á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不要尝试在生产中使用它。

答案 2 :(得分:2)

这是使用 Swift 和 Firebase helpGaétanZ's answer。 (watchOS 7+)

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

答案 3 :(得分:1)

在watchOS 6上,可以通过重写CLKTimeFormater的{​​{1}}方法来实现。 与其他方法一样,这是私有API,因此您不应在打算发布的应用程序上使用它。

timeText

答案 4 :(得分:0)

实际上找到了一种在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