一、能统一修改的地方
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 currentDevice] systemVersion] floatValue] >= 7.0) {
subviews = [[_searchBar.subviews objectAtIndex:0] subviews];
}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 whiteColor] forState: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中被使用过。
这些需要单独修改的就没有深入去改正了。