首页 > 代码库 > 解决UITableView在iOS7中UINavigationController里的顶部留白问题

解决UITableView在iOS7中UINavigationController里的顶部留白问题

解决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以上才会出现

 

解决UITableView在iOS7中UINavigationController里的顶部留白问题