Как добавить подпредставление к UIStatusBar в Теосе?

Я знаю, звучит так, будто на этот вопрос есть простой ответ, но выслушай меня. Хотя UIStatusBar это подкласс UIViewВы не можете использовать addSubview метод, чтобы добавить подпредставление к нему, потому что он не использует его. То же самое касается UIStatusBarWindow, Ни у вида, ни у окна нет контроллера вида, поэтому я никак не могу это зацепить.

Вот соответствующий раздел кода. Линия, где я называю addSubviews метод на себя является проблемой, потому что addSubviews не является методом UIStatusBar,

#import <CoreGraphics/CoreGraphics.h>

@interface UIStatusBar : UIView
@end

%hook UIStatusBar
- (void)layoutSubviews {
  //Round corners under status bar
  CGFloat radius = 15;
  CGRect wholeScreen = [[UIScreen mainScreen] bounds];
  UIView *roundedCorners = [[UIView alloc] initWithFrame: CGRectMake(-radius, 20-radius, wholeScreen.size.width+2*radius, wholeScreen.size.height-20+2*radius)];
  roundedCorners.layer.borderWidth = radius;
  roundedCorners.layer.cornerRadius = 2*radius;
  roundedCorners.layer.borderColor = UIColor.blackColor.CGColor;
  roundedCorners.userInteractionEnabled = NO;
  [self addSubView:roundedCorners];
}
%end

Есть ли другой способ, которым я могу добавить подпредставление? Причина, по которой я пытаюсь сделать это таким образом, заключается в том, что всякий раз, когда строка состояния скрыта, мой roundedCorners вид тоже скрыт. Я мог бы скрыть это всякий раз, когда строка состояния скрыта, но из-за разных приложений, использующих много разных способов скрытия строки состояния, которые не работают так, как я надеялся.

1 ответ

Я думаю, что решение здесь состоит в том, чтобы использовать уведомления, доставляемые всякий раз, когда высота строки состояния изменяется.

Используя либо / оба:

UIApplicationWillChangeStatusBarFrameNotification

UIApplicationDidChangeStatusBarFrameNotification

или вы также можете использовать AppDelegate методы, которые вызываются, когда строка состояния меняет фрейм:

-application:willChangeStatusBarFrame:

-application:didChangeStatusBarFrame:

В этих методах вы можете настроить закругленные углы в соответствии с новым фреймом строки состояния. Надеюсь, это решит вашу проблему!

Другие вопросы по тегам