IOS7:UITabBarController的“更多”标签设计受到干扰

时间:2013-12-17 14:37:58

标签: ios iphone objective-c ios7 uitabbarcontroller

我在我的项目UITabBarController中使用storyboard。该项目已使用iOS6 sdk进行编码。现在我正在研究它的iOS7兼容性。我通过提供自己的more来自定义“tableview”标签datasource的设计,并且它在iOS6中完美运行。奇怪的是iOS7设计受到了干扰。 Plz请参阅以下图片以获得更多详细说明。

iOS6的:

ios 6 screenshot

iOS7:

ios 7 screenshot

最后这里是代码: -

-(void)tabBarController:(UITabBarController *)tbController didSelectViewController:(UIViewController *)viewController {

    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;

    UINavigationController *navCtr=(UINavigationController *)viewController;
    UITableView *moreTable = (UITableView *)tabBarController.moreNavigationController.topViewController.view;
    moreTable.dataSource = nil;
    if ([[navCtr.viewControllers lastObject] isKindOfClass:NSClassFromString(@"UIMoreListController")]){
        moreTableViewDataSource=[[MoreTableViewDataSource alloc] init];
        moreTable.dataSource = moreTableViewDataSource;
        [moreTable setBackgroundColor:[UIColor clearColor]];
        [moreTable setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    }

}

MoreTableViewDataSource.h

@interface MoreTableViewDataSource : NSObject <UITableViewDataSource,UITableViewDelegate>
{

}

@property  (strong, nonatomic) id<UITableViewDataSource> originalDataSource;

-(MoreTableViewDataSource *) initWithDataSource:(id<UITableViewDataSource>) dataSource;

@end

MoreTableViewDataSource.m

@implementation MoreTableViewDataSource

-(MoreTableViewDataSource *) initWithDataSource:(id<UITableViewDataSource>) dataSource
{
    self = [super init];
    if (self)
    {
        self.originalDataSource = dataSource;
    }

    return self;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

    return 48.0;
}
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{
    return 5;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MoreTabCell *cell = (MoreTabCell*)[tableView dequeueReusableCellWithIdentifier:@"MoreTabCell"];
    if (cell==nil) {
        cell = [[[NSBundle mainBundle] loadNibNamed:@"MoreTabCell" owner:nil options:nil] objectAtIndex:0];
    }
    switch (indexPath.row) {
        case 0:
            cell.titleLbl.text=NSLocalizedString(@"approach", nil);
            break;
        case 1:
            cell.titleLbl.text=NSLocalizedString(@"opening_time", nil);
            break;
        case 2:
            cell.titleLbl.text=NSLocalizedString(@"weather", nil);
            break;
        case 3:
            cell.titleLbl.text=NSLocalizedString(@"ticket", nil);
            break;
        case 4:
            cell.titleLbl.text=NSLocalizedString(@"contact", nil);
            break;
        default:
            break;
    }

    cell.titleLbl.textColor=[UIColor lightBlueColor];
    [cell.titleLbl setFont:[UIFont setGothicFontBoldWithSize:14.0]];
    [cell.imgView setImage:[UIImage imageNamed:[NSString stringWithFormat:@"moreIcon%d",indexPath.row+1]]];
    cell.accessoryView = nil;
    return cell;
}
@end

2 个答案:

答案 0 :(得分:0)

不是在单元格中创建自己的titleLbl实例,为什么不以同样的方式简单地定位和设置现有的titleLabel样式?我不确定为什么会发生这种情况,因为您尚未上传MoreTabCell的代码,但如果您不想停止使用titleLabel.text = nil;,则可以尝试设置titleLbl。< / p>

答案 1 :(得分:0)

在我自己尝试之后,我发现诀窍是将tableview的委托设置为自定义或nil。由于UIMoreListControllertableView:willDisplayCell:forRowAtIndexPath:方法中填写了标题和其他内容。

希望这会有所帮助。