解决UITableView在iOS7中UINavigationController里的顶部留白问题
出现问题时候的截图:
源码:
用到的类:
UIViewController+TitleTextAttributes.h 与 UIViewController+TitleTextAttributes.m
// // UIViewController+TitleTextAttributes.h // YouXianMing // // Created by YouXianMing on 14-9-20. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import <UIKit/UIKit.h> #import "NCTitleAttribute.h" @interface UIViewController (TitleTextAttributes) /** * 设置当前控制器的标题属性 * * @param attribute 属性对象 */ - (void)titleTextAttributes:(NCTitleAttribute *)attribute; @end
// // UIViewController+TitleTextAttributes.m // YouXianMing // // Created by YouXianMing on 14-9-20. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import "UIViewController+TitleTextAttributes.h" @implementation UIViewController (TitleTextAttributes) #pragma mark - public - (void)titleTextAttributes:(NCTitleAttribute *)attribute { [self controller:self titleTextAttributes:[attribute transformToDictionary]]; } #pragma mark - private - (void)controller:(UIViewController *)controller titleTextAttributes:(NSDictionary *)dictionary { if ([controller isKindOfClass:[UIViewController class]]) { [controller.navigationController.navigationBar setTitleTextAttributes:dictionary]; } } @end
NCTitleAttribute.h 与 NCTitleAttribute.m
// // NCTitleAttribute.h // YouXianMing // // Created by YouXianMing on 14-9-20. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h> @interface NCTitleAttribute : NSObject @property (nonatomic, strong) UIColor *titleColor; // 标题颜色 @property (nonatomic, strong) UIFont *titleFont; // 标题字体 @property (nonatomic, strong) UIColor *shadowColor; // 阴影颜色 @property (nonatomic, assign) CGSize shadowOffset; // 阴影偏移量 // 将参数转换为字典 - (NSDictionary *)transformToDictionary; @end
// // NCTitleAttribute.m // YouXianMing // // Created by YouXianMing on 14-9-20. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import "NCTitleAttribute.h" @implementation NCTitleAttribute - (NSDictionary *)transformToDictionary { NSMutableDictionary *dic = [NSMutableDictionary new]; if (_titleColor) { [dic setObject:_titleColor forKey:NSForegroundColorAttributeName]; } else { [dic setObject:[UIColor blackColor] forKey:NSForegroundColorAttributeName]; } if (_titleFont) { [dic setObject:_titleFont forKey:NSFontAttributeName]; } if (_shadowOffset.height && _shadowOffset.width) { NSShadow *shadow = [NSShadow new]; shadow.shadowColor = _shadowColor; shadow.shadowOffset = _shadowOffset; [dic setObject:shadow forKey:NSShadowAttributeName]; } return dic; } @end
控制器源码:
// // ViewController.m // UIRectEdgeNone // // Created by YouXianMing on 14/10/29. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import "ViewController.h" #import "UIViewController+TitleTextAttributes.h" #import "NCTitleAttribute.h" #import "WxHxD.h" @interface ViewController ()<UITableViewDataSource, UITableViewDelegate> @property (nonatomic, strong) UITableView *tableView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 初始化标题 [self initTitle]; // 背景view UIView *backView = [[UIView alloc] initWithFrame:\ CGRectMake(0, [WxHxD statusBarAndNavigationBarHeight], [WxHxD screenWidth], [WxHxD screenHeight] - [WxHxD statusBarAndNavigationBarHeight])]; backView.layer.borderWidth = 2.f; backView.layer.borderColor = [UIColor redColor].CGColor; [self.view addSubview:backView]; // tableView _tableView = [[UITableView alloc] initWithFrame:backView.bounds style:UITableViewStylePlain]; _tableView.delegate = self; _tableView.dataSource = self; [backView addSubview:_tableView]; } - (void)initTitle { self.title = @"YouXianMing"; NCTitleAttribute *NCTitle = [NCTitleAttribute new]; NCTitle.titleColor = [UIColor redColor]; NCTitle.titleFont = [UIFont fontWithName:@"HelveticaNeue-Thin" size:24.f]; [self titleTextAttributes:NCTitle]; } #pragma mark - 代理 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 7; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *reusedFlag = @"YouXianMing"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reusedFlag]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reusedFlag]; } cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:18.f]; cell.textLabel.text = @"No Zuo No Die"; cell.textLabel.textColor = [UIColor grayColor]; return cell; } @end
如何解决呢?很简单:
添加以下代码:
// 让边缘留白为空
float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (systemVersion >= 7.0) {
self.edgesForExtendedLayout = UIRectEdgeNone;
}
效果:
注意:此种问题只有在iOS7以上才会出现