zoukankan      html  css  js  c++  java
  • 解决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以上才会出现

  • 相关阅读:
    解决linux下打开windows下压缩文件乱码的问题
    vim & emacs 强制修改 root 权限的文件
    在ubuntu下,给 svn diff 一点颜色
    sql优化(一)
    sql优化(二) 索引(一)
    Java反射与思想!
    JDK5.0枚举 泛型 注释
    忘羡的Day9!
    来博客的第二天!
    来博客第一天
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4059439.html
Copyright © 2011-2022 走看看