面试题答案
一键面试Size Class
- 定义:
- Size Class是一种在iOS 8.0引入的概念,用于抽象地描述屏幕尺寸的一种方式。它将屏幕的宽度和高度分别分为紧凑(Compact)和常规(Regular)两种状态,这样就形成了四种组合,即宽度紧凑高度紧凑(例如iPhone竖屏时的窄且短的屏幕空间)、宽度紧凑高度常规(如iPhone横屏时宽度变窄但高度仍有一定空间)、宽度常规高度紧凑(很少见,iPad横屏接近此状态但不完全符合)、宽度常规高度常规(例如iPad竖屏时的宽且高的屏幕空间)。
- 它提供了一种不依赖于具体设备尺寸的方式来设计用户界面,使得开发者可以基于不同的Size Class组合来创建不同的界面布局。
- 作用:
- 帮助开发者在设计界面时,根据不同的屏幕尺寸和方向,提供合适的布局。例如,在宽度紧凑的情况下,可以采用列表式布局,而在宽度常规的情况下,可以采用分栏式布局。这样能在不同设备上提供一致且良好的用户体验。
Trait Collection
- 定义:
- Trait Collection是一个包含了多个特征(traits)的集合对象,这些特征描述了设备的显示环境,其中就包括Size Class,还包括如显示缩放、用户界面布局方向(左到右或右到左)、水平和垂直的显示模式(紧凑或常规)等信息。每个视图控制器(UIViewController)都有一个traitCollection属性,视图(UIView)也有一个inheritedTraitCollection属性来获取父视图传递下来的Trait Collection。
- 作用:
- 它提供了一种统一的方式来查询设备的显示环境特征。开发者可以通过查询Trait Collection中的特征来动态地调整界面。例如,当设备方向改变时,Trait Collection中的相关特征会更新,开发者可以根据新的特征来调整视图的布局、字体大小等。
协作方式
- 布局调整:
- Interface Builder支持基于Size Class进行布局设计。当在Interface Builder中设置约束时,可以选择针对不同的Size Class组合设置不同的约束。例如,在宽度紧凑的Size Class下,将某个按钮的宽度设置为固定值,而在宽度常规的Size Class下,将该按钮的宽度设置为自适应屏幕宽度的百分比。
- 在代码中,当Trait Collection发生变化时(例如设备方向改变导致Size Class组合变化),视图控制器的
traitCollectionDidChange:
方法会被调用。开发者可以在这个方法中,根据新的Trait Collection中的Size Class信息,重新布局视图。例如,当从竖屏(宽度紧凑高度常规)变为横屏(宽度常规高度紧凑)时,将原本堆叠显示的两个视图改为并排显示。
- 资源加载:
- 可以根据Trait Collection中的Size Class来加载不同的图像资源。例如,为了适配不同设备的屏幕分辨率和尺寸,在项目中可以提供不同Size Class对应的图像。系统会根据当前设备的Trait Collection中的Size Class信息,自动加载合适的图像。这样在大屏幕设备(如iPad)上可以显示更清晰、更大尺寸的图像,而在小屏幕设备(如iPhone)上加载合适尺寸的图像,节省内存和加载时间。