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适配策略与实践 随着iOS系统的不断更新,开发者们面临着应用程序在新旧系统版本间保持一致用户体验的挑战。iOS7作为苹果操作系统的一个重大转折点,引入了全新的设计语言,对UI元素进行了彻底的重塑,这...
2. 边缘填充:在iOS 7中,`NavigationBar`与屏幕边缘有默认的间距,可以通过`edgesForExtendedLayout`属性进行调整。 3. 内容上下偏移:由于`NavigationBar`变得更透明,可能需要调整`contentInset`来确保内容不被...
在iOS开发中,适配不同版本的操作系统是一项重要的工作,特别是在iOS 6和iOS 7之间,由于设计语言和用户界面的重大变化,适配显得尤为关键。标题"ios6 7适配"指的是针对这两种iOS版本进行应用兼容性的优化。 在iOS ...
1. **手势区域的调整**:默认的手势识别区域可能不适合所有应用,可以通过修改`edgesForExtendedLayout`属性来扩大或缩小手势识别区域。 2. **动画平滑性**:确保返回动画的流畅性,可以使用`animate(withDuration:...
在iOS 7之后,苹果引入了“全屏模式”,使得StatusBar与视图控制器的内容紧密融合,开发者可以通过`edgesForExtendedLayout`属性控制内容是否延伸到StatusBar下方。 在该源码Demo中,可能涉及到以下关键知识点: 1...
#### 7. 表格视图 - **UIViewController 内建 TableView**: 在 UIViewController 中嵌入 UITableView,可以通过设置 `tableView.delegate` 和 `tableView.dataSource` 来控制表格视图的行为。 #### 8. 数据管理 - *...
使用`edgesForExtendedLayout`属性可以控制视图是否延伸到状态栏下。 5. **自定义视图控制器代理** - `UINavigationControllerDelegate`协议提供了方法,如`navigationController:willShowViewController:animated...
可能需要调整`edgesForExtendedLayout`属性,或者手动处理状态栏的透明度。 "CKNavSmoothDemo"的源码可能还包含了其他细节,如如何处理顶部布局约束(layout constraints)以适应导航栏的变化,以及在不同屏幕尺寸...
3. `UIStatusBarStyleBlackTranslucent`:在iOS 7之前是黑色半透明,但在iOS 7及以后与`UIStatusBarStyleLightContent`相同。 你可以通过`UIViewController`的`preferredStatusBarStyle`方法来设置当前视图控制器的...
在iOS开发中,Swift语言是苹果官方推荐的编程语言,用于构建各种应用程序,包括使用TabBar界面的应用。TabBar是iOS应用中常见的导航组件,它允许用户通过底部的一排标签在多个视图之间切换。本教程将深入讲解如何在...
在iOS平台上,实现沉浸式状态栏可以通过修改`UIViewController`的`edgesForExtendedLayout`属性,将其设置为`.all`,并配合`statusBarStyle`来调整颜色。滑动效果则可能涉及到`UIScrollView`的代理方法,比如`...
在iOS应用开发中,UISearchDisplayController是一个非常重要的组件,它提供了一种优雅的方式来实现搜索功能,特别是与UITableView结合使用时。UISearchDisplayController管理着一个UISearchBar和一个单独的...
在iOS 7以后的版本中,`edgesForExtendedLayout`属性默认值为`.all`,意味着内容会延伸到屏幕的边缘,包括Navigation Bar下方。将它设置为`.none`可以避免内容被Navigation Bar遮挡。然而,如果仍然存在问题,你可能...
总的来说,解决iOS开发中tableView上方空出20像素的问题,关键在于理解和利用好`edgesForExtendedLayout`属性,以及检查并适当地配置自动布局约束。通过这些方法,我们可以让内容正确地显示,提供用户更舒适的界面...
2. **状态栏透明度**:可以设置`edgesForExtendedLayout`属性,使状态栏与内容区域融合,达到透明或半透明效果。 3. **状态栏隐藏**:使用`prefersStatusBarHidden`方法,根据业务需求动态控制状态栏的显示和隐藏。...
在Android或iOS应用开发中,实现“导航栏透明”是一个常见的需求,这可以让应用程序看起来更加现代化和时尚。本文将深入探讨如何在不同的平台和技术栈中实现这个效果。 首先,我们来了解一下“导航栏”(Navigation...
在iOS中,可以使用`UIStatusBarStyle`属性或在`ViewController`中设置`edgesForExtendedLayout`来控制状态栏的样式和扩展行为。 综上所述,"国家区号及语言切换,状态栏浸入"这一功能涉及到了移动应用开发中的多个...
- **iOS**:在iOS中,可以通过修改`UINavigationBar`的`barTintColor`和`translucent`属性来实现类似的效果。同时,使用`edgesForExtendedLayout`属性可以让内容扩展到导航栏下方,实现沉浸感。 4. **注意事项** ...
对于iOS开发,使用Swift或Objective-C,可以通过设置`UIWindow`的`isStatusBarHidden`属性来隐藏状态栏,然后自定义顶部导航栏或使用`edgesForExtendedLayout`属性来扩展内容区域覆盖原本的标题栏区域。 在Web应用...