UIWindow實戰(zhàn)一

在項目中經(jīng)常會碰到一些全屏的彈窗,最簡單的方法就是把這個View添加到keyWindow上面

@interface TestView : UIView
- (void)show;
@end

@implementation TestView


- (instancetype)init
{
    if (self = [super init]) {
        //初始化以及添加subview
    }
    return self;
}

- (void)show
{
    [[UIApplication sharedApplication].keyWindow addSubview:self];
}

運行結(jié)果我們可以發(fā)現(xiàn)如下的效果,但是彈出視圖位于狀態(tài)欄下方,也許此時設(shè)計師就提出來說狀態(tài)欄需要放到彈出視圖的下方。
彈出視圖位于狀態(tài)欄下方是因為承載APP大多數(shù)界面的那個window的windowlevel沒有狀態(tài)欄的windowlevel高。



如果需要將彈出視圖放到狀態(tài)欄上方,可以考慮調(diào)整keywindow的windowlevel

- (void)show
{
    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    window.windowLevel = UIWindowLevelStatusBar + 1;
    [window addSubview:self];
}

運行結(jié)果發(fā)現(xiàn)狀態(tài)欄不見了,這個keywindow來到了狀態(tài)欄的上方,并且keywindow的背景是白色,所以導(dǎo)致狀態(tài)欄不可見了,另外修改keywindow的windowlevel可能會導(dǎo)致其他界面出現(xiàn)問題。



最后想到新建一個window,該window的windowlevel比狀態(tài)欄的大一點點,然后把彈出視圖加到這個window上就可以了

@interface TestView()

@property (nonatomic, strong) UIWindow *window;

@end

@implementation TestView

- (instancetype)init
{
    if (self = [super init]) {
        //省略...
    }
    return self;
}

- (void)show
{
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.rootViewController = [UIViewController new];
    self.window.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.3];
    self.window.windowLevel = UIWindowLevelStatusBar + 1;
    [self.window makeKeyAndVisible];
    [self.window addSubview:self];
}

- (void)hide
{
    [self.window resignKeyWindow];
    
    [self removeFromSuperview];
}

這里需要注意是window必須聲明為強引用的,如果window是局部變量,那么在方法結(jié)束后window就被銷毀了,從而導(dǎo)致彈出視圖無法顯示。

運行結(jié)果如下圖所示


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,192評論 3 119
  • 今天定內(nèi)容打卡,想做一個筆記型手帳,但是只做了一個框架,沒有內(nèi)容。后來想了一下,如果要做得精細,還是要加入一些故事...
    杉杉木33閱讀 178評論 2 0
  • 閱讀時間-2018年6月13日8點15分到8點55分。閱讀圖書-一西游記。你看起來好像很好吃。我媽媽。陪讀者,媽媽...
    正當(dāng)閱讀 203評論 0 0
  • 我這幾天沒別的事兒了,壓力太大了,什么都干不下去,做夢都在那幾條道上開車。怎么辦? 一個人真的強大...
    落雪小依閱讀 128評論 3 0
  • 從事保險快2年了,第二次因為保險簽單而流淚!別人簽單是開心,而我確是流淚!回想起除了自己的保險單,人生第一...
    Applestar英語老師閱讀 287評論 1 0

友情鏈接更多精彩內(nèi)容