Есть способ выполнить sh это. На мой взгляд, он не самый элегантный, и я согласен с Gereon, что вам лучше создать подкласс UIViewController
, реализовать его там, а затем все ваши контроллеры представления наследуются от этого базового класса.
Однако вы можете выполнить sh, используя метод Swizzling. Смотрите здесь: https://nshipster.com/method-swizzling/. В вашем случае вы можете переключить его в AppDelegate в application: didFinishLaunchingWithOptions:
и переключить prefersHomeIndicatorAutoHidden
в свою пользовательскую функцию, которая возвращает YES
.
Так что для переключения я бы предложил создать новую категорию UIViewController. И собственно метель:
#import <objc/runtime.h>
@implementation UIViewController (Swizzling)
+ (void)load
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class class = [self class];
SEL originalSelector = @selector(prefersHomeIndicatorAutoHidden);
SEL swizzledSelector = @selector(swizzledPrefersHomeIndicatorAutoHidden);
Method originalMethod = class_getInstanceMethod(class, originalSelector);
Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
const BOOL didAdd = class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod));
if (didAdd)
class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
else
method_exchangeImplementations(originalMethod, swizzledMethod);
});
}
- (BOOL)prefersHomeIndicatorAutoHidden
{
return YES; //Doesn't matter what you return here. In this you could return the actual property value.
}
- (BOOL)swizzledPrefersHomeIndicatorAutoHidden //This is the actual `prefersHomeIndicatorAutoHidden ` call
{
return YES;
}
@end