IOS7 TableView适配

ios7下的app都是全屏的,意思就是所有控制器的view默认都是从屏幕的(0,0)开始。

为了达到全屏效果的app,官方为UIviewController增加了几个属性:

1 @property(nonatomic,assign) UIRectEdge edgesForExtendedLayout NS_AVAILABLE_IOS(7_0); // Defaults to UIRectEdgeAll
2  @property(nonatomic,assign) BOOL extendedLayoutIncludesOpaqueBars NS_AVAILABLE_IOS(7_0); // Defaults to NO, but bars are translucent by default on 7_0.
3  @property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets NS_AVAILABLE_IOS(7_0); // Defaults to YES

一:
  属性edgesForExtendedLayout,意思大概是边缘向四周展开

  edgesForExtendedLayout 值是结构体,默认值是 UIRectEdgeAll,

  也就是说,当一个控制器要往父控制器添加的时候,上下左右填充满整个屏幕。

  例如1:

  UIViewController添加到uiNavController上时,uiviewcontroller的y值 == 状态栏的的y

  这时候设置 self.edgesForExtendedLayout = UIRectEdgeNone;

  uiviewcontroller的y值 == 导航栏y + 导航栏height

  /*

   这种情况还可以设置,导航栏的bar的透明度属性translucent为no

   self.navigationController.navigationBar.translucent = NO;

     translucent属性在ios6之前默认为no,

   而在ios7下的导航栏默认却是半透明的,为yes,所以该属性不会占据空间。

  */

  例如2:

  UITableViewController添加到UITabBarController上时,UITableViewController的底部一部分cell会被TabBar挡住

  这时候设置self.edgesForExtendedLayout = UIRectEdgeNone;

  TabBar的y值 == CGRectGetMaxY(UITableViewController)

二 : 

  self.extendedLayoutIncludesOpaqueBars = YES;意思展开包括状态栏

三:

self.automaticallyAdjustsScrollViewInsets = YES;

  当设计到scrollView、tableview时,在设置完数据的时候,内部会改变contentInsets的top值为64 例如:group样式的tableView在有导航栏的控制器下,第0组的头部会多出一部分高度h原因是 ios7下group样式的tabelView的第0组第0个cell,在tableview中的y值为35!!!

并且在设置完cell数据之后,系统默认会执行

self.automaticallyAdjustsScrollViewInsets = YES;

也就是tableview的contentInset.top = 64;所以 第0组第0行cell的y值 = 64 + 35.要达到第0组第0行cell的y值 = 导航栏底部 的效果。就要在cell设置数据之前,

   tableView.contentInset = UIEdgeInsetsMake(- 35, 0, 0, 0);

这样在cell在设置完数据后,系统内部改变top值增加64,就恰好达到效果。若要达到每个group头部等高效果,    

     tableView.sectionHeaderHeight = cellSectionHeight;

     tableView.sectionFooterHeight = 0;  tableView.contentInset = UIEdgeInsetsMake(cellSectionHeight - 35, 0, 0, 0);

原文:http://wyfpkx.blog.163.com/blog/static/17260843920142422043416/

时间: 2024-12-18 15:34:44

IOS7 TableView适配的相关文章

Ios 6和ios7的适配

Ios 6和ios7的适配 1.普通的 ViewController:让view的显示从状态栏下面开始,只需在viewDidLayoutSubviews调整 view的bounds CGRect bounds = self.view.bounds; bounds.origin.y =  - [self.topLayoutGuide length]; self.view.bounds = bounds; 2.ScrollView 类型的 在viewDidLoad 里面加: if ([[UIDevi

tableview适配

//#define IOS7_OR_LATER ( [[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending ) - (void)setFrame:(CGRect)frame { if (IOS7_OR_LATER) { NSInteger inset = 10; frame.origin.x += inset; frame.size.width -= 2 * inset; } [su

ios8 ios7 tableview cell 分割线左对齐

ios8中左对齐代码 //加入如下代码 -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) { [tableView setSeparatorInset:UIEdgeI

iOS6与iOS7屏幕适配技巧

一.没有包装任何 导航控制器 或者UITabBarController 1.控制器的view是UIScrollView/UITableView/UICollectionView时(控制器是UITableViewController的时候) - (void)viewDidLoad { [super viewDidLoad]; // #ifdef __IPHONE_7_0是判断是否运行在Xcode5环境下,如果在Xcode5环境下才有下面的代码 #ifdef __IPHONE_7_0 if ([[U

iOS7 界面适配-NavigationBar StateBar

转 blog.csdn.net/ibcker/article/details/12115437 最近项目有个棘手的问题--适配IOS7.... 由于IOS7把整个内容区都上移了20,所以很多不是全屏的应用都不能很好的兼容,换用苹果文档的一句话就是说:如果你们原来的app就是全屏模式运行的,那你们几乎不用改,如果不是,那····· 改之前很有必要去阅读下苹果官方的<ios7过渡指南>http://t.cn/zRv5lQT  ,当然,也有人翻译了一份··如果那什么可以看中文的·· http://t

ios新特性sizeclasses的应用,以及ios7的适配问题

4s屏幕的适配: 运用sizeclasses的过程中,在做4s屏幕适配的时候,可以使用约束关系中的大于小于等于三种关系适配,添加多条约束条件,并且给每个约束条件设置1000.750.250三种优先级,合理运用比率关系以及视图的嵌套.通过这些操作,应该就可以适配4s屏幕 sizeclasses的IOS7适配问题: 使用sizeclasses的项目在IOS7的4s屏幕的模拟器上运行时,发现屏幕正常,但是在IOS7的4寸屏幕上时,出现上下黑边的情况,通过查阅资料发现,只需要添加一张名为[email p

ios7 tableview scrollsToTop 不执行处理方法

ios7中调用[self.tableview scrollsToTop] 没有效果(ios8中也没有效果) stackflow 处理方法: [self.tableviewscrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES]; 或者implement the UIScrollViewDelegate method scrollViewShouldScrollToTop: - (BOOL) scrollViewShouldScrollToT

XCode6.1中的ios7.1适配

在xcode6.1中新创建的项目,运行在我的ios7.1的ipod touch上时(与5s的一样的尺寸, Retina屏幕), 上下出现了黑边,由于没有下载7.1的模拟器,不知道模拟器上有无问题, 查了一番资料,最终解决方案: 在项目中增加2张图片即可 尺寸符合需求即可 [email protected][email protected] 特此记录.2015年3月15日, PM 05:24:52 参考资料:http://www.cocoachina.com/bbs/read.php?tid=27

ios7适配一些问题

ios7适配一些问题(http://www.cocoachina.com/ios/20130703/6526.html) 1.  如何判断版本 如果你已经开发过ios旧版本的app,现在想适配在ios7上,那如何判断现在的版本类型是一个很有用的办法: [[[UIDevice currentDevice] systemVersion] floatValue] < 7.0  //如果当前ios版本小于7 2.  edgesForExtendedLayout   //视图控制器,四条边不指定 在上述代