您的位置:首页 > 产品设计 > UI/UE

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

2014-10-29 21:21 316 查看
解决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以上才会出现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐