Как добавить подпредставление к 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:
В этих методах вы можете настроить закругленные углы в соответствии с новым фреймом строки состояния. Надеюсь, это решит вашу проблему!