当前位置: 首页 > 工具软件 > iOS7 Sampler > 使用案例 >

iOS7 -- iOS7的UI适配问题

陈成济
2023-12-01

一、能统一修改的地方

1、导航栏title的文字颜色

     新房、二手房和租房的导航栏的title用的是自定义的view,所以能显示成白色,而其他的地方,比如搜索、我的搜房、更多等的导航栏title的文字颜色是黑色的,在appdelegate的- (void)initTabBarControllerFromApp中添加以下代码能让title变回原来的白色。

     for (UINavigationController *nvc in arr) {

        [nvc.navigationBar setBarStyle:UIBarStyleBlack];

    }


2、tableview在UITableViewStyleGrouped模式下的问题

   小李哥在封装的cell中重写了-(void)setFrame:(CGRect)frame的方法,使得iOS7中的grouped下的cell的宽度得以调整回来,有个小问题就是,由于iOS对于cell的绘制的方式,使得超过一屏的tableview,滚动到下方的时候,下方新建的cell会存在宽度没有调整过来的问题,如下图的最后两个cell


根据现象和调试的结果得出以下的原因,cell绘制到tableview上它的frame是经过3次设置的,第一次是cell初始化alloc的时候,此时应该只是设置它的bounds,使用的是默认的值(如44pt的高);第二次是根据自定义的数据(如在tableview的回调方法中设置的rowHeight)和cell在tableview的位置再设置它的frame,此时cell已能显示在tableview上,但是此时cell的父view的父view是null;第三次,tableview会调一个[UITableView _updateVisibleCellsNow:]的私有方法,调了此方法后,cell就能以调整好宽度的形态显示在tableview上。出现上图最下面两个cell的原因就在于对于滚动之后的cell,tableview没有走第三步的方法,因此cell的宽度没有被调整到。

   解决的办法是在封装的cell中重写此方法,让cell画到tableview之后强制设置以下frame,就能以正确的宽度显示在tableview上了。

     - (void)didMoveToSuperview

     {

         [self setFrame:self.frame];

         [super didMoveToSuperview];

     }

    另外iOS7的cell分割线是由默认的15pt的偏移的,在小李哥的重写的方法中添加 tableView.separatorInset = UIEdgeInsetsZero;,让分割线的位置不带偏移。


3、cell的删除

   在浏览历史里删除历史时,delete按钮的显示会有问题,正常的话delete按钮会如下图显示

     

     实际上在工程中,删除按钮显示了一下就消失了。

     原因是tableview在编辑模式下,会自动生成一层backgroundview,这个backgroundview的层次在删除按钮的上方,而且这个view不明原因的会在不恰当的时候自动右移,把删除按钮给遮盖住(这个问题据网友说是iOS7众多bug中的一个),解决的思路有两种,一种是让backgroundview下移,另一种是让删除按钮上移。

     使用第一种方法的时候,由于另一个不明原因的bug,显示效果会如下,在删除按钮出来的时候,cell的contentview会不受控制的右移66pt,使得cell上面的内容盖在了删除按钮上面。

     

     因此选择第二种方法的效果会好一些,虽然也是不完美的,因为就如第一张图所示的,cell的内容能看出来右移了。在封装的cell的- (void)layoutSubviews中添加如下代码能达到目的

  - (void)layoutSubviews {

    [super layoutSubviews];

        for (UIView *subview in self.subviews) {

            for (UIView *subview2 in subview.subviews) {

                if ([NSStringFromClass([subview2 class]) isEqualToString:@"UITableViewCellDeleteConfirmationView"]) { 

                    [subview bringSubviewToFront:subview2];

                }

            }

        }

    [self layoutSubClassViews];


     }   

2、UISearchBar的背景图

   iOS7中的UISearchBar的view的层次结构不一样了,我们需要删除它的背景的话,需要做一下判断,使用类似以下的方式

     NSArray *subviews = nil;

    if ([[[UIDevice currentDevicesystemVersionfloatValue] >= 7.0) {

        subviews = [[_searchBar.subviews objectAtIndex:0subviews];

    }else{

        subviews = _searchBar.subviews;

    }

    for (UIView *subview in subviews)

    {

        if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")])

        {

            [subview removeFromSuperview];

            break;

        }

    }

3、UISearchBar的取消按钮

   iOS7中的搜索栏的取消按钮的文字颜色默认会是灰色,在去掉UISearchBar的背景之后会变得难以识别,如果要恢复成iOS6的样式的话,可以增加如下的修改

     if([cc isKindOfClass:[UIButton class]])

        {

            UIButton *btn = (UIButton *)cc;

            [btn setTitle:@"取消"  forState:UIControlStateNormal];


            /*iOS7 fix*/

            btn.titleLabel.font = [UIFont boldSystemFontOfSize:12.0f];

            [btn setTitleColor:[UIColor whiteColorforState:UIControlStateNormal];

            /*iOS7 fix*/

           

            searchCancleButton = btn;

            [btn setBackgroundImage:[UIImage imageNamed:@"rightBarButtonItemBack.png"forState:UIControlStateNormal];


        }

     


二、需要单独修改的地方

1、tableview的grounded模式下,iOS7的tableview的主体和header view的间距比iOS6的要小,使得房贷计算器和税费计算器的样式会有错乱(刚更新了代码,这个改了)。

2、使用到UISearchDisplayController的UISearchBar,进行搜索的时候,会有frame的偏差。

3、目前自定义的cell中textfield在y上有10pt的偏移,在iOS7中这10pt会使得textfield与label的文字不对齐

4、最后是发现一个小问题,封装的tableview的separatorStyle不起作用了。设置在setting中的separatorStyle没有在tableview中被使用过。

这些需要单独修改的就没有深入去改正了。

 类似资料: