本文主要是介绍适配遇到的一些问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
程序设置了UINavigationController 把navigationBarHidden=YES 放一个scrollview在坐标0,0 为什么scrollview里面的视图有全部下移20像素 要怎么解决?
//自动调整滚动视图插入self.automaticallyAdjustsScrollViewInsets = NO;
把这句话放到 viewdidload 里就行了。
1、如果设置了self.navigationController.navigationBar 设置了UIBarMetricsLandscapePhone的背景;而没有设置UIBarMetricsDefault的背景,navigationBar会变透明
如图所示: navigationBar透明
2、上图还出现了一个问题,如果没有设置 self.automaticallyAdjustsScrollViewInsets = NO,那么iOS7下会自动让scrollView滑动多次,以满足UITableView第一行的显示需要,这又带来了另外一个问题,下拉刷新的View的frame也随之发生了改变,导致整个下拉刷新不可用了
3、self.automaticallyAdjustsScrollViewInsets 这个属性是IOS7才有的新方法,目的就是为了让scrollView自动适应屏幕,如果self.automaticallyAdjustsScrollViewInsets = NO,那么效果会变成下图所示:
我的ViewController继承的是UITableViewController, 所以TableView是随系统而产生的,在IOS7之前,tableView的Frame的起始点是(0, 20),在IOS7之后,它的起始点变成了(0,0),这个时候如果为了让下拉刷新能正常工作,必须设置self.edgesForExtendedLayout = UIRectEdgeNone
(这种情况适用于容器建立在UINavigationController).
4、 如果设置了self.navigationController.navigationBar 设置UIBarMetricsDefault的背景为空,则默认的是IOS7上边栏平铺效果,如果设置了图片,并且这个图片高度保持在44(88),那么IOS5,6,7的效果是一致的。
5、 iOS7中的StatusBar的没有了背景,他的UIStatusBarStyleLightContent和UIStatusBarStyleDefault只会改变StatusBar的文字,都不会有背景
6、 ViewController-Based Status Bar Appearance控制了StatusBar的外观,如果设置为YES,则会调用preferredStatusBarStyle。如果为NO,则通过传统方式来控制
下图示IOS6,7上的正常情况
7、在IOS7下,如果不设置navigationBar的背景图片,而且设置[ navigationBar setBarStyle:UIBarStyleBlackTranslucent];可以获取默认的黑色毛玻璃效果哟
如果大家还有遇到一些奇怪的问题,欢迎大家来补充
self.automaticallyAdjustsScrollViewInsets = NO;
看这个UIViewController的这个属性你就明白了,此属性默认为YES,这样UIViewController下如果只有一个UIScollView或者其子类,那么会自动留出空白,让scollview滚动经过各种bar下面时能隐约看到内容。但是每个UIViewController只能有唯一一个UIScollView或者其子类,如果超过一个,需要将此属性设置为NO,自己去控制留白以及坐标问题。
http://blog.csdn.net/mac_cm/article/details/9234451,这个里面有一些属性介绍
#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
这个是判断iphone5 or 4
注意,目前我做的适配
如果之前使用了nib文件,同时ui不是自己手写代码add上去的,这里需要在代码里控制每一个ui了(如果你也中枪,那就跟我一样慢慢改吧,以后写代码尽可能手动)
如果是代码里画的ui,那么问题不大,做出响应调整即可。
当然如果你不需要兼容ios5.0,这样可以完全使用autolayout,这样可以使你的工作量降至最低,如果有不同方法欢迎大家来讨论
1,首先
1 2 3 4 5 6 7 8 9 | //定义宏,判断ios7 #define IOS7 [[[UIDevice currentDevice]systemVersion] floatValue] >= 7.0 //添加代码 if (IOS7) { self .edgesForExtendedLayout = UIRectEdgeNone; //视图控制器,四条边不指定 self .extendedLayoutIncludesOpaqueBars = NO ; //不透明的操作栏<br> self.modalPresentationCapturesStatusBarAppearance = NO; } |
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 if (IOS7) { self .edgesForExtendedLayout = UIRectEdgeNone; self .extendedLayoutIncludesOpaqueBars = NO ; self .modalPresentationCapturesStatusBarAppearance = NO ; // self.automaticallyAdjustsScrollViewInsets = NO; // self.navigationController.navigationBar.translucent = NO; // self.tabBarController.tabBar.translucent = NO; } #endif |
总结iOS 8和Xcode 6的各种坑
NSUserDefaults坑
通过NSUserDefaults
储存在本地的数据,在模拟器删除APP、clean之后无法清空数据,我尝试删除iPhone 4s、iPhone 5s......里面的同一个项目,还是无解,这应该是个BUG,等苹果更新Xcode吧(我目前用的6.0)。但是真机没有这种情况(必须的啊)
UITableView坑
带有UITableView的界面如果到遇到以下警告
Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.
添加以下代码可解决
self.tableView.rowHeight = 44.0f;
autolayout坑
典型的UITabBarController作为根视图,然后点击其中一个页面button的时候push到一个列表页情况,结构如下图
如果在列表页需要隐藏tabbar,那么我一般都会在这个VC把bottombar设置为none以便能更好的进行约束布局,但是......在调试的时候你会发现进入列表页的瞬间底部会出现一个tabbar高度的视图。还是老老实实在就用默认的Inferred吧。
键盘弹不出
取消选择Connect Hardware Keyboard
detailTextLabel无法显示
先来下面这段代码
- (void)viewDidLoad
{[super viewDidLoad];dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{self.array = @[@"测试"];[self.tableView reloadData];});
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{return 1;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TradeRecordCell"forIndexPath:indexPath];cell.detailTextLabel.text = _array[indexPath.row];return cell;
}
代码没什么问题,在iOS 7下,一秒之后cell的detailTextLabel就会显示测试
两个字,但是在iOS 8却不行detailTextLabel显示为空。测试发现,当detailTextLabel的text一开始为空,iOS 8下运行就会把这个label的size设置(0, 0)从而不能正确显示,原因是这里cell.detailTextLabel.text = _array[indexPath.row];
一开始数据就是空的,解决办法:
如果是空就不去设置值
if (_array[indexPath.row]) {cell.detailTextLabel.text = _array[indexPath.row];}
或者
cell.detailTextLabel.text = _array[indexPath.row] ? : @" ";
pch文件不见了
现在Xcode 6创建的项目默认是不带pch文件的,当然了旧版本的项目是会保留的。那么如何添加pch文件?
* Command + N 然后在Other里面选择PCH File
* 在Build Settings里面找到Prefix Header
* 添加pch文件,规则是: 项目名/xxxxx.pch
UIAlertView的坑
UIAlertView显示无标题的长文本问题
UIAlertView *alterView = [[UIAlertView alloc] initWithTitle:nil message:@"远端Git仓库和标准的Git仓库有如下差别:一个标准的Git仓库包括了源代码和历史信息记录。我们可以直接在这个基础上修改代码,因为它已经包含了一个工作副本。" delegate:self cancelButtonTitle:@"知道了" otherButtonTitles:nil, nil];
[alterView show];
上面这段代码在iOS 8下显示的样子是这样的,内容完全顶到的顶部,文字还莫名其妙的加粗了
难道我会告诉你只要把title设置为@""
就行了吗
这篇关于适配遇到的一些问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!