iOS7 edgesForExtendedLayout 頂部位置偏差



今天在做UISearchBar,UISearchDisplayController時遇到了一個問題,在點擊搜索欄時陰影部分的位置出現偏差

如下圖:


始終覺得很奇怪,後面單獨做了一個demo,將同樣的代碼拷過去發現顯示正常的。

然後再逐一查看代碼看到如下:

  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.     // Do any additional setup after loading the view.  
  5.     if (OSVersionIsAtLeastiOS7()) {  
  6.         if ([self respondsToSelector:@selector(edgesForExtendedLayout)])  
  7.         {  
  8.             self.edgesForExtendedLayout = UIRectEdgeNone;  
  9.         }  
  10.     }  
  11. }  
發現可疑之處,Google之iOS 7 教程:讓程序同時支持iOS 6和iOS 7,找到答案。

原因:

在iOS 7中,蘋果引入了一個新的屬性,叫做[UIViewController setEdgesForExtendedLayout:],它的默認值爲UIRectEdgeAll。當你的容器是navigation controller時,默認的佈局將從navigation bar的頂部開始。這就是爲什麼所有的UI元素都往上漂移了44pt。

修復這個問題的快速方法就是在方法- (void)viewDidLoad中添加如下一行代碼:

<span class="line-number" style="margin:0px; padding:0px">1</span>
self.edgesForExtendedLayout = UIRectEdgeNone;

這樣問題就修復了。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章