适配遇到的一些问题

2024-09-02 01:18
文章标签 问题 遇到 适配

本文主要是介绍适配遇到的一些问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

程序设置了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(6401136), [[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到一个列表页情况,结构如下图storyboard.jpg
如果在列表页需要隐藏tabbar,那么我一般都会在这个VC把bottombar设置为none以便能更好的进行约束布局,bottombar.png但是......在调试的时候你会发现进入列表页的瞬间底部会出现一个tabbar高度的视图。还是老老实实在就用默认的Inferred吧。


键盘弹不出

keyboard.png取消选择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 Headerpch.jpg
* 添加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下显示的样子是这样的,内容完全顶到的顶部,文字还莫名其妙的加粗了alert.png
难道我会告诉你只要把title设置为@""就行了吗



这篇关于适配遇到的一些问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128582

相关文章

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

解决Entity Framework中自增主键的问题

《解决EntityFramework中自增主键的问题》:本文主要介绍解决EntityFramework中自增主键的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Entity Framework中自增主键问题解决办法1解决办法2解决办法3总结Entity Fram