2015-04-22 21 views
1

)我有一個問題,但我真的不知道如何解決它,我正在開發一個IOS應用程序使用Objective-C和每當個人熱點打開視圖獲取推下它(所以我失去了像我的導航欄20px),我試圖找到一個解決方案在線,但我沒有發現,有人請給我任何意見,如何可能解決這個問題?當個人熱點開啓時(IOS應用程序 - 目標C),視圖被推高(

編輯: 的問題應該是這個圖書館,我使用了滑動菜單: https://github.com/aryaxt/iOS-Slide-Menu 我的根視圖控制器具有類SlideNavigationController,我試圖將其刪除,並認爲沒有得到推起來像以前一樣..有沒有人有類似的問題?

回答

3

這是因爲滑動菜單在激活時總是將self.view.frame.origin.y設置爲0。

要解決這個問題,您需要根據狀態欄的高度手動調整偏移量。

有兩個地方,你可以找到在SlideNavigationController.mrect.origin.y = 0,一個是moveHorizontallyToLocation(它處理「推」的動畫),另一種是在initialRectForMenu(該幀的初始化方法)。您需要將0更改爲這兩行的正確偏移量。

執行計算偏移量可以找到here

- (float)offsetFromTop { 
    UIView *view = self.view; 
    CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame]; 
    CGRect statusBarWindowRect = [view.window convertRect:statusBarFrame fromWindow:nil]; 
    CGRect statusBarViewRect = [view convertRect:statusBarWindowRect fromView:nil]; 
    float fullHeight = statusBarViewRect.size.height; 
    float offset = fullHeight; 
    if (![UIApplication sharedApplication].statusBarHidden) { 
     offset -= STATUS_BAR_HEIGHT; 
    } 
    return offset; 
} 

然後替換這兩個符合rect.origin.y = [self offsetFromTop];

+0

非常感謝你,它完美的工作! – Signo

+1

對不起@ lozy219只有最後一個「問題」,如果(例如)熱點爲ON,並顯示菜單,它根據熱點的酒吧高度計算出正確的高度,但如果我關閉熱點菜單有一個從頂部偏移(計算出的偏移量),是否可以重新計算偏移量? – Signo

+1

@Signo嗯..我錯過了這個問題之前,如何在''''[setup]'方法中添加'[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateMenuFrameAndTransformAccordingToOrientation)name:UIApplicationWillChangeStatusBarFrameNotification object:nil]'' ?當狀態欄的高度改變時,我們更新菜單框架。但是,這可能不會返回到正確的高度,需要稍微調整一下。我相信@aryaxt很快就會修復這個庫。 – lozy219

1

餘米也面臨同樣的問題,當我打開熱點我的看法是怎麼回事(20像素)下降等,如果我刪除熱點MyView的被幹擾(這裏我使用了3個獨立的視圖,如Titlabar,scrollview和bottomview ..)。

問題是當你連接到熱點時,那時「statusbar」的高度增加了。所以觀點正在下降。

SOLU:在這裏,基於狀態欄的高度,我們要更新的UIView佈局,像下面....

viewDidLoad中寫下面的代碼:

-(void)viewdidload 
{ 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didStatusBarFrameChanged) name:UIApplicationDidChangeStatusBarFrameNotification object:nil]; 
} 

-(void)didStatusBarFrameChanged 
{ 
CGRect barFrame = [UIApplication sharedApplication].statusBarFrame; 
NSLog(@"didStatusBarFrameChanged %@", NSStringFromCGRect(barFrame)); 
[self updatePageViewLayouts]; 
} 

注:這裏使用「 UIApplicationDidChangeStatusBarFrameNotification「這,我們正在獲取狀態欄高度更新Notification.so基於你可以增加/減少20px的視圖大小(高度)。

相關問題