iOS 7、iOS 8屏幕适配

在iOS 8中,[UIScreen bounds] 、[UIScreen applicationFrame] 、Status bar、Keyboard这些frame都是根据设备真实方向来返回frame的,而在iOS 7中,不过是横屏还是竖屏,iOS总是返回竖屏的frame,如以下输出:

iOS 7:

竖屏:
UIScreen.mainScreen().bounds: (0.0,0.0,320.0,568.0)
横屏:
UIScreen.mainScreen().bounds: (0.0,0.0,320.0,568.0)

iOS 8:

竖屏:
UIScreen.mainScreen().bounds: (0.0,0.0,320.0,568.0)
横屏:
UIScreen.mainScreen().bounds: (0.0,0.0,568.0,320.0)

这就对某些支持横屏的App造成了困扰,其实也只需要加两个宏或者改造一下就行了:

#define SCREEN_WIDTH        (getScreenSize().width)
#define SCREEN_HEIGHT       (getScreenSize().height)
CGSize getScreenSize() {
    CGSize screenSize = [UIScreen mainScreen].bounds.size;
    if ((NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_7_1) &&
        UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
        return CGSizeMake(screenSize.height, screenSize.width);
    }
    return screenSize;
}

虽然 contentInset 不属于屏幕适配的内容,但是我还是放在屏幕适配里说一下。iOS8 和 iOS7 对 automaticallyAdjustsScrollViewInsets 属性的解释不一样:

  • iOS8 会把该属性的影响作用到 controller 的 view 的 subviews 上
  • iOS7 仅会作用到 self.view 上

另外当你还需要手动调用 contentInset 的时候,iOS7 似乎就不会自动调整了。解决办法就是将 automaticallyAdjustsScrollViewInsets 设置为 NO,然后自己控制 contentInset。

时间: 2024-08-30 18:28:20

iOS 7、iOS 8屏幕适配的相关文章

iOS屏幕适配开发实用技巧_IOS

一.旋转处理 第一步:注册通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeFrames:) name:UIDeviceOrientationDidChangeNotification object:nil]; 第二步:处理接收事件 -(void)changeFrames:(NSNotification *)notification{ NSLog(@"change notifica

ios-iOS iphone和iPad屏幕适配

问题描述 iOS iphone和iPad屏幕适配 怎么做一个能同时适配iPhone和iPad的APP,两套xib共用一套代码,xcode用的是最新的xcode7 解决方案 ios xib适配iPhone,iPad语句iOS:适配iPad的横屏Iphone图像渲染与屏幕适配 解决方案二: 你这个问题太宽泛了,要细化 解决方案三: 主要问题是在于分辨率,界面要自适应,可以缩放,如果感觉麻烦,也可以根据分辨率来写死,界面分成两套,但逻辑是一套 解决方案四: 主要问题是在于分辨率,界面要自适应,可以缩放

iOS屏幕适配-iOS笔记

学习目标 1.[了解]屏幕适配的发展史 2.[了解]autoResizing基本用法 3.[掌握]autoLayout 的基本用法 4.[掌握]autoLayout代码实现 5.[理解]sizeClass的基本用法 一.屏幕适配的发展史 随着iOS屏幕尺寸越来越多样化,屏幕适配也就越来越重要了. iphone1 - iphone3gs时代,window的size固定为(320,480).我们只需要简单计算一下相对位置就好了,不需要做屏幕适配. iphone4 - iphone4s时代,苹果推出了

IOS开发之绝对布局和相对布局(屏幕适配)

        之前如果做过Web前端页面的小伙伴们,看到绝对定位和相对定位并不陌生,并且使用起来也挺方便.在IOS的UI设计中也有绝对定位和相对定位,和我们的web前端的绝对定位和相对定位有所不同但又有相似之处.下面会结合两个小demo来学习一下我们IOS开发中UI的绝对定位和相对定位.在前面的博客中所用到的UI事例用的全是绝对定位,用我们Storyboard拖拽出来的控件全是绝对定位的,就是我们可以同改变组件的frame来改变组件的位置和大小.而相对定位则不同,相对定位是参考组件周围的元素来

iOS开发技巧 - Size Class与iOS 8多屏幕适配(一)

0. 背景: 在iOS开发中,Auto Layout(自动布局)能解决大部分的屏幕适配问题. 但是当iPhone 6和iPhone 6 Plus发布以后, Auto Layout已经不能解决复杂的屏幕适配问题了, 因此, 在iOS 8以后苹果推出了Size Class, 它是基于Auto Layout技术的.   1. Size Class的开启和使用 与Auto Layout不同, Size Class不能通过代码编程管理,只能通过IB(Interface Builder)使用. 默认情况下S

【iOS】屏幕适配之NSLayoutConstraint

import Foundation class NSLayoutConstraintEx: NSLayoutConstraint {     @IBInspectable     var ipad: CGFloat = 0 {         didSet {             if DeviceUtils.isIPad() {                 constant = ipad             }         }     }     @IBInspectable

IOS开发遇到的屏幕上下闪出黑边的解决方法

IOS开发遇到的屏幕上下闪出黑边的解决方法 在IOS开发时,使用的时IOS的模拟器,程序中任何有关坐标的地方也是根据屏幕获取的,而在IOS7的系统上运行,却发现屏幕小了一截,上下各闪出一块黑色区域.后经过查找原因,解决方法如下: 项目的App Icon and Launch Images设置中,本来是这样的: 点击Use Asset Catalog,之后点击Migrate,设置界面如下图模样: 这时在IOS7上就能充满屏幕了.

ios 屏幕旋转-IOS实现单个ViewController屏幕旋转?

问题描述 IOS实现单个ViewController屏幕旋转? 如何像微博那样只有在查看图片的ViewController中使得屏幕可以旋转? 解决方案 iOS 5.1实现旋转屏幕 解决方案二: 只在对应的controller打开屏幕旋转,实现代理方法即可

ios-xcode屏幕适配问题!!!

问题描述 xcode屏幕适配问题!!! 一个app想适配不同的iPhone屏幕,我们老师讲两种方式,一个是代码里不要将每个控件的frame写死,而是用变量设置,通过UIScreen mainScreen 得到屏幕的大小,就可以动态改变控件的大小,来完成适配.还有一个方法就是在xib里进行控件的自动布局,之前也一直使用这两个方法,但是比较繁琐.最近突然发现,如果把项目里自带的lunchScreen.xib删除,或许自己创建一个View作为载入的时候,xcode会自动拉伸屏幕,所有控件都跟着屏幕等比