适配遇到的一些问题

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

相关文章

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

nginx中端口无权限的问题解决

《nginx中端口无权限的问题解决》当Nginx日志报错bind()to80failed(13:Permissiondenied)时,这通常是由于权限不足导致Nginx无法绑定到80端口,下面就来... 目录一、问题原因分析二、解决方案1. 以 root 权限运行 Nginx(不推荐)2. 为 Nginx

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.