edgesForExtendedLayout

今天在做UISearchBar,UISearchDisplayController时遇到了一个问题,在点击搜索栏时阴影部分的位置出现偏差

如下图:

始终觉得很奇怪,后面单独做了一个demo,将同样的代码拷过去发现显示正常的。

然后再逐一查看代码看到如下:

[objc] view plaincopyprint?

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    if (OSVersionIsAtLeastiOS7()) {
        if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        {
            self.edgesForExtendedLayout = UIRectEdgeNone;
        }
    }
}  

发现可疑之处,Google之iOS 7 教程:让程序同时支持iOS 6和iOS 7,找到答案。

原因:

在iOS 7中,苹果引入了一个新的属性,叫做[UIViewController setEdgesForExtendedLayout:],它的默认值为UIRectEdgeAll。当你的容器是navigation controller时,默认的布局将从navigation bar的顶部开始。这就是为什么所有的UI元素都往上漂移了44pt。

修复这个问题的快速方法就是在方法- (void)viewDidLoad中添加如下一行代码:


1


self.edgesForExtendedLayout = UIRectEdgeNone;

这样问题就修复了。

时间: 2024-10-14 19:12:49

edgesForExtendedLayout的相关文章

[IOS]edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets、、

在IOS7以后 ViewController 开始使用全屏布局的,而且是默认的行为通常涉及到布局 就离不开这个属性 edgesForExtendedLayout,它是一个类型为UIExtendedEdge的属性, 指定边缘要延伸的方向,它的默认值很自然地是UIRectEdgeAll,四周边缘均延伸,就是说, 如果即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域. 因为一般为了不让tableView 不延伸到 navigationBar 下面, 属性设置

UIViewController的edgesForExtendedLayout属性

UIViewController的edgesForExtendedLayout属性 想必大家都遇到一种情况,明明y坐标设置的是0,但是总是被讨厌的导航栏给遮住.比如下面这个情况: UILabel *label = [[UILabel alloc] init]; label.frame = CGRectMake(10, 0, SCREEN.width - 20, 88); label.backgroundColor = [UIColor redColor]; label.text = @"关注公众

【iOS】edgesForExtendedLayout

在 iOS 7.0 中,苹果引入了一个新的属性,叫做 edgesForExtendedLayou,它的默认值为 UIRectEdgeAll. 当你的容器是 navigationController 时,默认的布局将从 navigation bar 的顶部开始.这就是为什么所有的 UI 元素都往上漂移了44pt. 修复这个问题的快速方法就是在方法 viewDidLoad 中添加如下一行代码: self.edgesForExtendedLayout = UIRectEdgeNone; 这样问题就修复

iOS edgesForExtendedLayout、extendedLayoutIncludesOpaqueBars、automaticallyAdjustsScrollViewInsets属性详解

edgesForExtendedLayout: 在IOS7以后 ViewController 开始使用全屏布局的,而且是默认的行为通常涉及到布局,就离不开这个属性 edgesForExtendedLayout,它是一个类型为UIExtendedEdge的属性,指定边缘要延伸的方向,它的默认值很自然地是UIRectEdgeAll,四周边缘均延伸,就是说,如果即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域.因为一般为了不让tableView 不延伸到 n

使用edgesForExtendedLayout遇到的麻烦

今天在写一个多界面之间来回返回的工程时,遇到的问题,建了两个类:FirstViewController 和 ButtonViewController. 由 FirstViewController 进入 ButtonViewController,我在 FirstViewController.m 和 ButtonViewController.m 中分别使用: self.navigationController.navigationBarHidden = YES; // 隐藏导航栏 FirstView

self.edgesForExtendedLayout=UIRectEdgeNone;

IOS7之后 self.edgesForExtendedLayout=UIRectEdgeNone; self.automaticallyAdjustsScrollViewInsets=NO; 只要设置了 self.edgesForExtendedLayout ,UIRectEdgeAll的时候会让tableView从导航栏下移44px,设置为UIRectEdgeNone的时候,刚刚在导航栏下面. self.edgesForExtendedLayout=UIRectEdgeNone or UIR

[IOS]edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets

在IOS7以后 ViewController 开始使用全屏布局的,而且是默认的行为通常涉及到布局 就离不开这个属性 edgesForExtendedLayout,它是一个类型为UIExtendedEdge的属性, 指定边缘要延伸的方向,它的默认值很自然地是UIRectEdgeAll,四周边缘均延伸,就是说, 如果即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域. 因为一般为了不让tableView 不延伸到 navigationBar 下面, 属性设置

edgesForExtendedLayout和automaticallyAdjustsScrollViewInsets属性

想必大家都遇到这种情况,设置的y坐标明明为0,但显示的内容还是被导航栏遮住一部分,比如一个简单的tableview,如下图: 大家可以看到第0行和第一行的部分都被遮挡住了,这是因为在ios7 之后,引入了一个新的属性:edgesForExtendedLayout,默认值是UIRectEdgeAll,当你用UINavigationController时,默认的布局就是从状态栏的顶部开始,所以前两行正如看到的那样向上偏移了64像素. @property(nonatomic,assign) UIRec

edgesForExtendedLayout ios7新特性导致autoLayout自动布局结果不正确

edgesForExtendedLayout是一个类型为UIExtendedEdge的属性,指定边缘要延伸的方向. 因为iOS7鼓励全屏布局,它的默认值很自然地是UIRectEdgeAll,四周边缘均延伸,就是说,如果即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域. ? self.edgesForExtendedLayout = UIRectEdgeNone; ? 来解决UINavigationBar透明的问题.设置了UIRectEdgeNone之后