iOS App在點(diǎn)擊狀態(tài)欄時(shí)可以自動(dòng)滾動(dòng)到頂部表牢。這個(gè)屬性可以通過scrollsToTop
來控制,當(dāng)存在多個(gè)scrollview時(shí),可以關(guān)閉其他的scrollview的scrollsToTop
,只開啟某一個(gè)scrollview的scrollsToTop
屬性,來響應(yīng)回到頂部的事件。
但當(dāng)多個(gè)scrollview嵌套時(shí),可能存在上述做法都做了,但還是不響應(yīng)回到頂部的事件,這個(gè)時(shí)候我們可以給statusbar上覆蓋上一個(gè)window,用這個(gè)window來接收響應(yīng)事件。
@property (nonatomic,strong) UIWindow *coverWindow;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.8 * NSEC_PER_SEC)),
dispatch_get_main_queue(), ^{
_coverWindow =[[UIWindow alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 20)];
_coverWindow.hidden = NO;
_coverWindow.backgroundColor = [UIColor clearColor];
_coverWindow.windowLevel = UIWindowLevelStatusBar + 1;//優(yōu)先級(jí)比statusbar高一點(diǎn),蓋住statusbar
//添加手勢(shì)
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapWindowScrollsToTop)];
[_coverWindow addGestureRecognizer:tap];
[_coverWindow makeKeyAndVisible];//讓window變成主window,并顯示出來
});
Tips:延時(shí)創(chuàng)建是為了等控制器先創(chuàng)建好后再添加window。
當(dāng)不想要這個(gè)新添加的window時(shí),只需要將其置為nil,就被移除釋放掉了志鹃。
要注意,如果你需要在window上添加類似UIAlertView等控件,而此時(shí)新加的window由于被注冊(cè)成了keywindow,所以加的UIAlertView都被添加到新自定義的window上,所以我想到了下邊的辦法夷都。
在_coverWindow
變成keywindow之前,先獲取原來的keywindow。
UIWindow * window = [UIApplication sharedApplication].keyWindow;
你應(yīng)該猜到了,我要干嘛隘庄。
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.8 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
_coverWindow =[[UIWindow alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 20)];
_coverWindow.hidden = NO;
_coverWindow.backgroundColor = [UIColor clearColor];
_coverWindow.windowLevel = UIWindowLevelStatusBar + 1;//優(yōu)先級(jí)比statusbar高一點(diǎn),蓋住statusbar
//添加手勢(shì)
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapWindowScrollsToTop)];
[_coverWindow addGestureRecognizer:tap];
[_coverWindow makeKeyAndVisible];//讓window變成主window,并顯示出來
[window makeKeyWindow];//把原來的window在變成主window
});
在原來代碼基礎(chǔ)上,最后再加一句,這樣,在新加的window變成主window后,把原來獲取的window 接著變成主window。這樣就不影響之后的往keywindow上添加的控件的顯示了癣亚。
當(dāng)然這只是我暫時(shí)想到的辦法,有什么更好的方法,歡迎留言給我丑掺。