ios中滑动视图怎么阻止自动让出状态栏20像素
推荐于2016-07-08 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517193
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
iPhone软键盘占据216像素高,这对于iPhone仅仅320*480像素的屏幕来说,不能说不是一个很糟糕的事情。 为了避免输入控件被弹出的216像素高的软键盘所遮挡,程序员们想出了各种各样的方式,在软键盘弹出时调整窗口视图的尺寸。
程序员们普遍采用的一种方式,是监听软键盘事件。当软键盘弹出时,窗体的View被上移,当软键盘隐藏时,窗体的View恢复原来位置,这样就避免了输入控件被遮挡。
但是,由于SDK的原因,在View移动的过程中,会导致一个“20像素Bug”的问题。即键盘隐藏后,View下移的位置会偏离原来位置20个像素。这个Bug最直观的表现是,View的最下端露出了20像素的空白。
解决20像素的bug的方法很简单,就是在隐藏键盘时,手动将View的 y坐标下移20像素。
但是,对于另一种情况,我们做这样的调整则是多余的,它反而会在View的上端露出20像素空白。
SDK的这种Bug让我们无所适从。到底什么时候需要调整View的20像素,什么时候不需要调整呢?
问题就在于状态栏上。状态栏是否可视,直接影响这20像素是否需要调整。很显然,当statusBarHidden为NO(默认)时,view的有效高度为480,否则view的有效高度只有460而已。我们在xib中设计view的位置的时候,不管statusbar是否为None,view的origin都是(0,0),但SDK在加载xib之后,会根据statusBarHidden的属性自动调整view的位置,使得view最上端的20像素不会被状态栏所遮盖。
也就是说,当statusBarHidden为NO时,虽然我们在IB中看到view的origin是(0,0),但实际运行时,view的origin已经被SDK调整为正确的(20,0)。
因此,在键盘隐藏时,程序员不应该把view移动到(0,0)处,而应该调整到(20,0)处。因为SDK已经不会为我们做这件事情,我们得用自己的代码来做。
当然,如果你确实不需要在你的app中显示一个状态栏,我们会在application:didfinishLaunchWithOption:方法中这样做 :
[[UIApplicationsharedApplication] setStatusBarHidden:YESwithAnimation:UIStatusBarAnimationNone];
注意,setStatusBarHidden:animated方法现在已经被新的方法所代替。
如果是这样,我们没有必要将view的位置调整到(20,0)。我们可以在代码中通过判断statusBarHidden的值来决定是否需要调整20像素。
int bug20px=([[UIApplicationsharedApplication]isStatusBarHidden]?0:20);
注意,statusBarHidden属性很奇怪,它既不是view的属性,也不是window的属性,而是UIApplication的属性。
另外还有一个问题,如果ViewController如果是使用NavigationController负责导航的,则这20像素也不需要调整。
int bug20px=([[UIApplicationsharedApplication]isStatusBarHidden]||viewController.navigationController?0:20);
程序员们普遍采用的一种方式,是监听软键盘事件。当软键盘弹出时,窗体的View被上移,当软键盘隐藏时,窗体的View恢复原来位置,这样就避免了输入控件被遮挡。
但是,由于SDK的原因,在View移动的过程中,会导致一个“20像素Bug”的问题。即键盘隐藏后,View下移的位置会偏离原来位置20个像素。这个Bug最直观的表现是,View的最下端露出了20像素的空白。
解决20像素的bug的方法很简单,就是在隐藏键盘时,手动将View的 y坐标下移20像素。
但是,对于另一种情况,我们做这样的调整则是多余的,它反而会在View的上端露出20像素空白。
SDK的这种Bug让我们无所适从。到底什么时候需要调整View的20像素,什么时候不需要调整呢?
问题就在于状态栏上。状态栏是否可视,直接影响这20像素是否需要调整。很显然,当statusBarHidden为NO(默认)时,view的有效高度为480,否则view的有效高度只有460而已。我们在xib中设计view的位置的时候,不管statusbar是否为None,view的origin都是(0,0),但SDK在加载xib之后,会根据statusBarHidden的属性自动调整view的位置,使得view最上端的20像素不会被状态栏所遮盖。
也就是说,当statusBarHidden为NO时,虽然我们在IB中看到view的origin是(0,0),但实际运行时,view的origin已经被SDK调整为正确的(20,0)。
因此,在键盘隐藏时,程序员不应该把view移动到(0,0)处,而应该调整到(20,0)处。因为SDK已经不会为我们做这件事情,我们得用自己的代码来做。
当然,如果你确实不需要在你的app中显示一个状态栏,我们会在application:didfinishLaunchWithOption:方法中这样做 :
[[UIApplicationsharedApplication] setStatusBarHidden:YESwithAnimation:UIStatusBarAnimationNone];
注意,setStatusBarHidden:animated方法现在已经被新的方法所代替。
如果是这样,我们没有必要将view的位置调整到(20,0)。我们可以在代码中通过判断statusBarHidden的值来决定是否需要调整20像素。
int bug20px=([[UIApplicationsharedApplication]isStatusBarHidden]?0:20);
注意,statusBarHidden属性很奇怪,它既不是view的属性,也不是window的属性,而是UIApplication的属性。
另外还有一个问题,如果ViewController如果是使用NavigationController负责导航的,则这20像素也不需要调整。
int bug20px=([[UIApplicationsharedApplication]isStatusBarHidden]||viewController.navigationController?0:20);
网易云信
2023-12-06 广告
2023-12-06 广告
很高兴能回答您的问题。以下是一段针对“一对一消息组件”的描述,字数在200字左右:该组件支持用户之间的私密交流,让沟通更加直接和高效。通过它,您可以向特定对象发送消息,并实时查看消息状态,包括对方是否已读或未读。同时,该组件还支持富文本消息...
点击进入详情页
本回答由网易云信提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询