`
stephen830
  • 浏览: 3011608 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

iOS7 edgesForExtendedLayout

 
阅读更多

iOS7 edgesForExtendedLayout

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

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

self.edgesForExtendedLayout = UIRectEdgeNone

这样问题就修复了。

 

 

 

1,首先

1
2
3
4
5
6
7
8
9
//定义宏,判断ios7
#define IOS7 [[[UIDevice currentDevice]systemVersion] floatValue] >= 7.0
 
//添加代码
if (IOS7)
{
    self.edgesForExtendedLayout = UIRectEdgeNone;               //视图控制器,四条边不指定
    self.extendedLayoutIncludesOpaqueBars = NO;                 //不透明的操作栏<br>    self.modalPresentationCapturesStatusBarAppearance = NO;
}

  

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
    if (IOS7)
    {
        self.edgesForExtendedLayout = UIRectEdgeNone;
        self.extendedLayoutIncludesOpaqueBars = NO;
        self.modalPresentationCapturesStatusBarAppearance = NO;
//        self.automaticallyAdjustsScrollViewInsets = NO;
//        self.navigationController.navigationBar.translucent = NO;
//        self.tabBarController.tabBar.translucent = NO;
    }
#endif

self.automaticallyAdjustsScrollViewInsets = NO;
看 这个UIViewController的这个属性你就明白了,此属性默认为YES,这样UIViewController下如果只有一个 UIScollView或者其子类,那么会自动留出空白,让scollview滚动经过各种bar下面时能隐约看到内容。但是每个 UIViewController只能有唯一一个UIScollView或者其子类,如果超过一个,需要将此属性设置为NO,自己去控制留白以及坐标问 题。

 

http://blog.csdn.net/mac_cm/article/details/9234451,这个里面有一些属性介绍

#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

这个是判断iphone5 or 4 

 

注意,目前我做的适配

如果之前使用了nib文件,同时ui不是自己手写代码add上去的,这里需要在代码里控制每一个ui了(如果你也中枪,那就跟我一样慢慢改吧,以后写代码尽可能手动)

如果是代码里画的ui,那么问题不大,做出响应调整即可。

 

当然如果你不需要兼容ios5.0,这样可以完全使用autolayout,这样可以使你的工作量降至最低,如果有不同方法欢迎大家来讨论

分享到:
评论

相关推荐

    IOS7 UI适配

    ### IOS7 UI适配策略与实践 随着iOS系统的不断更新,开发者们面临着应用程序在新旧系统版本间保持一致用户体验的挑战。iOS7作为苹果操作系统的一个重大转折点,引入了全新的设计语言,对UI元素进行了彻底的重塑,这...

    IOS源码——ios适用于iOS 5、iOS 6和iOS 7的自定义NavigationBar.7z

    2. 边缘填充:在iOS 7中,`NavigationBar`与屏幕边缘有默认的间距,可以通过`edgesForExtendedLayout`属性进行调整。 3. 内容上下偏移:由于`NavigationBar`变得更透明,可能需要调整`contentInset`来确保内容不被...

    ios6 7适配

    在iOS开发中,适配不同版本的操作系统是一项重要的工作,特别是在iOS 6和iOS 7之间,由于设计语言和用户界面的重大变化,适配显得尤为关键。标题"ios6 7适配"指的是针对这两种iOS版本进行应用兼容性的优化。 在iOS ...

    iOS手势返回上一级

    1. **手势区域的调整**:默认的手势识别区域可能不适合所有应用,可以通过修改`edgesForExtendedLayout`属性来扩大或缩小手势识别区域。 2. **动画平滑性**:确保返回动画的流畅性,可以使用`animate(withDuration:...

    IOS应用源码Demo-顶部状态bar效果-毕设学习.zip

    在iOS 7之后,苹果引入了“全屏模式”,使得StatusBar与视图控制器的内容紧密融合,开发者可以通过`edgesForExtendedLayout`属性控制内容是否延伸到StatusBar下方。 在该源码Demo中,可能涉及到以下关键知识点: 1...

    个人整理超精密的iOS笔记.pdf

    #### 7. 表格视图 - **UIViewController 内建 TableView**: 在 UIViewController 中嵌入 UITableView,可以通过设置 `tableView.delegate` 和 `tableView.dataSource` 来控制表格视图的行为。 #### 8. 数据管理 - *...

    IOS应用源码——顶部状态bar效果.zip

    使用`edgesForExtendedLayout`属性可以控制视图是否延伸到状态栏下。 5. **自定义视图控制器代理** - `UINavigationControllerDelegate`协议提供了方法,如`navigationController:willShowViewController:animated...

    ios-导航栏的平滑显示和隐藏.zip

    可能需要调整`edgesForExtendedLayout`属性,或者手动处理状态栏的透明度。 "CKNavSmoothDemo"的源码可能还包含了其他细节,如如何处理顶部布局约束(layout constraints)以适应导航栏的变化,以及在不同屏幕尺寸...

    深入理解iOS的状态栏

    3. `UIStatusBarStyleBlackTranslucent`:在iOS 7之前是黑色半透明,但在iOS 7及以后与`UIStatusBarStyleLightContent`相同。 你可以通过`UIViewController`的`preferredStatusBarStyle`方法来设置当前视图控制器的...

    ios-Swift之TabBar的使用.zip

    在iOS开发中,Swift语言是苹果官方推荐的编程语言,用于构建各种应用程序,包括使用TabBar界面的应用。TabBar是iOS应用中常见的导航组件,它允许用户通过底部的一排标签在多个视图之间切换。本教程将深入讲解如何在...

    仿京东首页沉浸式以及滑动效果

    在iOS平台上,实现沉浸式状态栏可以通过修改`UIViewController`的`edgesForExtendedLayout`属性,将其设置为`.all`,并配合`statusBarStyle`来调整颜色。滑动效果则可能涉及到`UIScrollView`的代理方法,比如`...

    iOS应用中UISearchDisplayController搜索效果的用法

    在iOS应用开发中,UISearchDisplayController是一个非常重要的组件,它提供了一种优雅的方式来实现搜索功能,特别是与UITableView结合使用时。UISearchDisplayController管理着一个UISearchBar和一个单独的...

    iOS中UITableview错位的问题怎么修复

    在iOS 7以后的版本中,`edgesForExtendedLayout`属性默认值为`.all`,意味着内容会延伸到屏幕的边缘,包括Navigation Bar下方。将它设置为`.none`可以避免内容被Navigation Bar遮挡。然而,如果仍然存在问题,你可能...

    tableView上面空出20个像素的解决办法

    总的来说,解决iOS开发中tableView上方空出20像素的问题,关键在于理解和利用好`edgesForExtendedLayout`属性,以及检查并适当地配置自动布局约束。通过这些方法,我们可以让内容正确地显示,提供用户更舒适的界面...

    顶部状态bar效果.zipIOS应用例子源码下载

    2. **状态栏透明度**:可以设置`edgesForExtendedLayout`属性,使状态栏与内容区域融合,达到透明或半透明效果。 3. **状态栏隐藏**:使用`prefersStatusBarHidden`方法,根据业务需求动态控制状态栏的显示和隐藏。...

    导航栏透明

    在Android或iOS应用开发中,实现“导航栏透明”是一个常见的需求,这可以让应用程序看起来更加现代化和时尚。本文将深入探讨如何在不同的平台和技术栈中实现这个效果。 首先,我们来了解一下“导航栏”(Navigation...

    国家区号及语言切换,状态栏浸入

    在iOS中,可以使用`UIStatusBarStyle`属性或在`ViewController`中设置`edgesForExtendedLayout`来控制状态栏的样式和扩展行为。 综上所述,"国家区号及语言切换,状态栏浸入"这一功能涉及到了移动应用开发中的多个...

    沉浸式状态栏

    - **iOS**:在iOS中,可以通过修改`UINavigationBar`的`barTintColor`和`translucent`属性来实现类似的效果。同时,使用`edgesForExtendedLayout`属性可以让内容扩展到导航栏下方,实现沉浸感。 4. **注意事项** ...

    取消 TitleBar

    对于iOS开发,使用Swift或Objective-C,可以通过设置`UIWindow`的`isStatusBarHidden`属性来隐藏状态栏,然后自定义顶部导航栏或使用`edgesForExtendedLayout`属性来扩展内容区域覆盖原本的标题栏区域。 在Web应用...

Global site tag (gtag.js) - Google Analytics