今天在做UISearchBar,UISearchDisplayController時遇到了一個問題幔摸,在點擊搜索欄時陰影部分的位置出現偏差
- 在iOS 7中,蘋果引入了一個新的屬性,叫做[UIViewController setEdgesForExtendedLayout:]娶靡,它的默認值為UIRectEdgeAll,四周邊緣均延伸茎芭,就是說揖膜,如果即使視圖中上有navigationBar,下有tabBar骗爆,那么視圖仍會延伸覆蓋到四周的區(qū)域次氨。當你的容器是navigation controller時,默認的布局將從navigation bar的頂部開始摘投。這就是為什么所有的UI元素都往上漂移了44pt
(void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
if (OSVersionIsAtLeastiOS7()) {
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
{
self.edgesForExtendedLayout = UIRectEdgeNone;
}
}
}
- 雖然self.edgesForExtendedLayout = UIRectEdgeNone;來解決UINavigationBar透明的問題煮寡。設置了UIRectEdgeNone之后,你嵌在UIViewController里面的UITableView和UIScrollView就不會穿過UINavigationBar了犀呼,同時UIView的控件也回復到了iOS6時代幸撕。
- 不過這個對于Status Bar在iOS7上面的變化是無效的,正確的說應該是部分無效外臂。在存在Navigation部分或者Tabbar部分的時候坐儿,上面的代碼可以使得Status Bar也不載透明(有待驗證,畢竟UIViewController的可用空間被控制了)宋光,但是在沒有這兩個部分的時候貌矿,Status Bar依舊是會記入UIView范圍的。
補充:
ScrollView莫名其妙不能在viewController劃到頂怎么辦罪佳?在導航控制器中如果出現了scrollView逛漫,會自動加上64的偏移,不讓控制器自動生成64的偏移
self.automaticallyAdjustsScrollViewInsets = NO;