2014-02-06 103 views
6

我使用添加的MKMapView導致狀態欄問題中的iOS 7

if(st.version == 7) 
{ 
    CGRect screen = [[UIScreen mainScreen] bounds]; 
    CGRect frame = self.navigationController.view.frame; 
    frame.origin.y = 20; 
    frame.size.height = screen.size.height - 20; 
    self.navigationController.view.frame = frame; 
} 

由於我使用的是導航控制器,並使用[self.navigationController pushViewController:newone animated:YES];從一個推到另一個解決的iOS 7的狀態欄問題。它在所有視圖控制器中工作正常。但是,如果視圖控制器在xib中有mkmapview,就會發生ios 7的狀態欄問題。

如果刪除的MapView形式XIB並推到該視圖控制器裝置,它會像,

enter image description here

如果我即使通過下面的代碼添加的MapView,

mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 100, 320, 100)]; 
[self.view addSubview:self.mapView]; 

它看起來像,

enter image description here

如何解決這個問題?

+0

我不能在我的macine中重現此問題,你可以在github中提供一些示例項目。我會幫助解決這個問題很容易。 – CoolMonster

+0

你試過了,clipsToBounds爲mapview – Pawan

+0

哪個設備來3.5或4英寸或兩者 – codercat

回答

1

如果您在viewWillAppear中添加mapView,請將其替換爲viewDidAppear
也許你有這個問題,因爲你在你的視圖完全設置之前正在操作視圖的框架

2
if(st.version == 7){ 

    mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 120, 320, 100)]; 

}else{ 

    mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 100, 320, 100)]; 

} 
+1

這個答案是錯誤的,這個問題與mapview的框架無關。 – NAZIK

1

試試這個

- (void)viewWillAppear:(BOOL)animated 
{ 
    self.navigationController.navigationBar.translucent = NO; 
} 


- (void)viewDidAppear:(BOOL)animated 
{ 
    self.navigationController.navigationBar.translucent = YES; 
} 
+0

添加mapview後,我希望視圖看起來像[this](http://i.stack.imgur.com/zgyiw.png)。這個答案不會解決問題 – NAZIK

1

我會強烈建議反對這樣做這樣。

如果您使用界面生成器,然後添加基於您希望您的應用程序看起來約束和框架將自動調整自身。

如果你不使用界面生成器,則仍然使用的限制,但得到有關使約束編程一個很好的教程(因爲我不知道該怎麼做我自己)。

編輯:我強烈建議不使用硬編碼的數字做的原因是,這將是一個痛苦的做iOS的6/7橫向/縱向3.5/4英寸的屏幕。這是8例。

+0

應用程序只有一個方向,它也支持ios 5,我們不能使用自動佈局。 – NAZIK

+0

很好的建議,但這不是答案 –

+0

Zsolt,你會介意將其遷移到評論。我同意Daij-Djan說這不是一個答案。 – lpapp

1

我認爲你有一些調整你的導航Y位置設置-20px。這樣它覆蓋。使用此代碼,您的ViewController

CGRect screen = [[UIScreen mainScreen] bounds]; 
CGRect frame = self.navigationController.view.frame; 
frame.origin.y =0; 
frame.size.height = screen.size.height; 
self.navigationController.view.frame = frame; 

或可能它,你必須使用你的項目wantFullScreenLayout一些地方

setWantsFullScreenLayout = YES: 

狀態欄部分位於(0,0)點來抓。 Statusbar和當前視圖的大小一樣大,以增加mainScreen的值來改變邊界的大小。 狀態欄更改半透明樣式的樣式。

這下面的鏈接,你得到一些明確的想法您的問題

How do I get the navigation bar in a UINavigationController to update its position when the status bar is hidden?

+0

wantsFullScreenLayout在iOS 7中已棄用 – Andy

+0

在iOS6中查看問題圖像的問題。觀看導航後退按鈕,您可以瞭解出現問題的哪個版本。@Andy – codercat

+0

不,我相信問題圖像是在iOS 7中捕獲的。導航欄中的後退按鈕可以在iOS 7中自定義爲iOS 6樣式。但是狀態欄無法在iOS中定製爲iOS 7樣式6. – lancy

1

覆蓋的-edgesForExtendedLayout方法在您的視圖控制器

-(UIRectEdge)edgesForExtendedLayout { 
    return UIRectEdgeNone; 
} 
0
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 
[application setStatusBarHidden:YES]; 
return YES;} 

請將此行添加到您的代碼。這將隱藏狀態欄從您的應用程序。

+0

他並非試圖隱藏吧。地圖視圖擰了他的佈局 –

1

如果你想隱藏特定視圖狀態欄添加這個方法在特定view.m文件

- (BOOL)prefersStatusBarHidden 
{ 
    return YES; 
} 
+0

他沒有,地圖視圖正在搞砸的事情 –

0

如果你有廈門國際銀行。您是否嘗試在仿真指標中啓用頂欄?

enter image description here

+0

並不真正影響輸出。特別是以編程方式添加地圖視圖 –

1

關於您的視圖控制器的viewDidLoad中或在IB設置self.automaticallyAdjustsScrollViewInsets = NO;什麼?

+0

請參閱問題圖片iOS6中的問題。觀看導航後退按鈕,您可以瞭解出現問題的哪個版本。 – codercat

+0

@iDev它是iOS 7根據作者指定的圖像和標籤。後退按鈕不是來自iOS 6,因爲它是自定義的。另一方面,這種問題基本上不會發生在iOS 6上,因爲它不支持擴展邊緣。 – Andy

1
  1. 嘗試設置MapView(ScrollView)automaticallyAdjustsScrollViewInsets = NO;
  2. 嘗試將edgesForExtendedLayout設置爲UIRectEdgeNone;
  3. 嘗試使用UIViewController.topLayoutGuide,請參閱蘋果關於此問題的Q & A:Preventing the Status Bar from Covering Your Views
  4. 嘗試使用欄位置代表團,見UIBarPositioningDelegate Protocol Reference

根據你的描述和截圖,你正試圖推動整個UINavigationController.view.frame 20磅,和的MapView(滾動型)做了一件防止它發生(或重新設置),把一些斷點和日誌跟蹤UINavigationController.view.frame的幀改變。

您能否提供一個示例項目?我很好奇發生了什麼。