UIKit框架(8)屏幕适配(一)

本篇本章介绍iOS开发中经常使用的几种屏幕适配方式,包括:

通过frame进行适配

通过AutoResizing进行适配

使用AutoLayout进行适配

使用ZXPAutoLayout进行适配

...

这里面最重要的是:通过frame适配以及AutoLayout

  • 屏幕适配的目的

目的一:

不同型号的iPhone和iPad可能拥有不同大小的屏幕(点坐标系不同)

发布一款App时,不能只针对一种规格的屏幕,应当在不同大小屏幕的设备都能够运行

目的二:

iPhone支持三个方向的旋转,iPad支持四个方向的旋转

当屏幕旋转时,点坐标系发生变化(屏幕的宽高发生变换),这时需要屏幕上的UI元素重新进行排列

App设置是否支持多个方向:

项目配置文件中:

控制器重写supportedInterfaceOrientations方法,可以指定页面支持的方向

- (UIInterfaceOrientationMask)supportedInterfaceOrientations

返回的是所支持方向的枚举值

默认情况横屏是不显示状态栏的,如果需要显示,在Info.plist中设置:

在AppDelegate中添加代码:

[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
  • 通过frame进行屏幕适配

针对目的一:设置子视图frame时,值都是根据父视图的宽高计算得出

针对目的二:当屏幕发生翻转时,重写计算一边子视图的宽高

在控制器子类中,将子视图frame的设置放在重写的viewDidLayoutSubviews方法中:

 - (void)viewDidLayoutSubviews     //注意:该方法中应先调用重写前的父类方法

在视图子类中,将子视图frame的设置放在重写layoutSubviews方法中:

- (void)layoutSubviews  //注意:该方法中应先调用重写前的父类方法

这两个方法都会在当前控制器的view或当前view的frame获得初值以及发生变化时自动调用

如:控制器中的btn按钮居中,且规定长宽为100

- (void) viewDidLayoutSubviews {
    [super viewDidLayoutSubiews];
    CGFloat x, y, w, h;
    w = h = 100;
    x = self.view.frame.size.width/2 - w/2;
    y = self.view.frame.size.height/2 - h/2;
    self.btn.frame = CGRectMake(x, y, w, h);
}
  • AutoResizing

用于确定一个视图控件在整个屏幕的位置,当屏幕尺寸变化或者发生反转时的效果

可以保证一个视图控件的部分或者全部frame属性的相对关系不发生改变,产生如居中、拉伸等效果。

如果选择使用AutoLayout,就不能使用AutoResizing

代码中使用:

UIView对象通过方法atuoResizingMask属性设置可拉伸的属性

@property(nonatomic) UIViewAutoresizing autoresizingMask
enum {
     UIViewAutoresizingNone = 0,
     UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
     UIViewAutoresizingFlexibleWidth = 1 << 1,
     UIViewAutoresizingFlexibleRightMargin = 1 << 2,
     UIViewAutoresizingFlexibleTopMargin = 1 << 3,
     UIViewAutoresizingFlexibleHeight = 1 << 4,
     UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
typedef NSUInteger UIViewAutoresizing;

这种样子的枚举,可以用 “|”运算,传递多个数值

如居中:

v.center = self.view.center;
vw.bounds = CGRectMake(0, 0, 100, 100);
[vw setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleBottomMargin];

如固定在左上角:

vw.frame = CGRectMake(20, 20, 100, 100);
[vw setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin}UIViewAutoresizingFlexibleBottomMargin];

storyboard中使用:

需要先将AutoLayout关闭(iOS7之后)

选择视图后,点击后边的size属性栏。

其中内部红色表示属性带拉伸效果,外部的红色表示距离屏幕边界的值固定。

如将自身的宽高属性的拉伸去掉,则尺寸固定。

时间: 2024-10-11 00:46:18

UIKit框架(8)屏幕适配(一)的相关文章

iOS屏幕适配的几种方式

屏幕适配问题共有四种解决方案:(1)根据屏幕宽高写控件frame(下策);(2)Autoresizing的使用(中策);(3)AutoLayout的使用(上策);(4)sizeClasses+AutoLayout的使用(上上策).下面将会分别来进行叙述. (1)根据屏幕宽高写控件frame 利用宽高比,在不同的屏幕中来进行对控件的位置与控件的宽高进行等比例缩放.选定一个型号的屏幕的宽高为基准,进行等比例缩放.例如以iPhone6或者iPhone6s为基准. 其宽高分别是375与667.Iphon

Autolayout屏幕适配——代码实现(苹果公司 / VFL语言 / 第三方框架Masonry)

在讲解如何通过代码来实现屏幕适配前,先来了解一下,屏幕适配中用到的约束添加的规则. 在创建约束之后,需要将其添加到作用的view上 在添加时要注意目标view需要遵循以下规则: 1. 约束规则    1> 添加约束的规则(一) 对于两个同层级view之间的约束关系,添加到它们的父view上 2> 添加约束的规则(二) 对于两个不同层级view之间的约束关系,添加到他们最近的共同父view上 3> 添加约束的规则(三) 对于有层次关系的两个view之间的约束关系,添加到层次较高的父view

Android屏幕适配框架-(今日头条终极适配方案)

在Android开发中,屏幕适配是一个非常头痛的问题,因而为了去进行屏幕适配,作为程序员,是呕心沥血,历经磨难,哈哈 我们之前做屏幕适配一般都会用到一下两种方式: 第一种就是宽高限定符适配,什么是宽高限定符适配呢 ├── src/main│   ├── res│   ├── ├──values│   ├── ├──values-800x480│   ├── ├──values-860x540│   ├── ├──values-1024x600│   ├── ├──values-1024x768│

UIKit框架各个类的简介

1.UIAcceleration: 被叫做加速事件的一个UIAcceleration类的实例是用来代表即时的三维加速数据.为了接收重力加速度,要注册一个应用应用程序作为一个共享UIAccelerater对象的委托对象(参考UIAcceleromete类). 2. UIAccelerater: UIAccelerater类可以让你的寄存器接收到从板载硬件上得到的加速相关数据.当设备移动时,它的硬件能够报告沿主线在三维空间中的线性加速度变化.你可以利用这些数据来检测器件的电流方向和该方向的瞬时变化.

034-iOS屏幕适配-iOS笔记

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

CSS基础教程 -- 媒体查询屏幕适配

响应式布局 Media Query 的使用方法 在上例中, 我们使用Media Queries来根据3种不同尺寸的窗口使用3种不同的样式.通过不同的媒体类型和条件定义样式表规则,媒体查询让CSS可以更精确作用于不同的媒体类型和同一媒体的不同条件.媒体查询的大部分媒体特性都接受min和max用于表达"大于或等于"和"小与或等于".如:width会有min-width和max-width媒体查询可以被用在CSS中的@media和@import规则上,也可以被用在HTML

iOS UIKit框架

1. 简介: UIKitk框架提供一系列的Class(类)来建立和管理iPhone OS应用程序的用户界面( UI )接口.应用程序对象.事件控制.绘图模型.窗口.视图和用于控制触摸屏等的接口.(PS1: 可以认为是操纵界面的一个API库)(PS2: UIKit框架是用在iOS平台上与之对应的是MAC OS X上的Application Kit,二者是姐妹框架,作用和目的没啥太大区别(我没有说实现目的的过程也一样),表混淆了) 2. 框架的入口: #import <UIKit/UIKit.h>

iOS 屏幕适配

对于iOS开发,屏幕的适配真的很重要,在这里就不多说了,今天主要给大家介绍一下按比例适配: 1.首先我们在 AppDelegate.h 里面定义两个宏定义,屏幕的宽和高 #import <UIKit/UIKit.h> //宏定义 #define ScreenHEIGHT [[UIScreen mainScreen] bounds].size.height #define ScreenWIDTH  [[UIScreen mainScreen] bounds].size.width @interf

iOS设计中不同屏幕适配的方法-登陆界面

在iOS的手机界面设计中,由于不同手机类型的手机的尺寸不同,那么在设计手机界面时就得对屏幕进行适配,这里就以登陆界面的设计为例简单说明下 实现屏幕适配的方法:(屏幕自动适配缩放) 效果: 下面就看下代码实现的过程: 1.在代理中实现的代码: AppDelegate.h // 登陆界面设计 #import <UIKit/UIKit.h> #define ScreenHeight [[UIScreen mainScreen]bounds].size.height//屏幕高度 #define Scr