IOS面试常见问题解答(2018年9月)第3部分

iOS面试题2018

Q1。 您有一个iOS应用程序处于前台,用户在iPhone上按“主页”按钮,将调用UIViewController的哪个API,并按正确的顺序进行描述?

解决方案: ViewWillDisappear-> ViewDidDisappear

加载视图控制器的方法有以下三种:

  1. 要从情节instantiateViewController(withIdentifier:)加载视图控制器,请调用相应的UIStoryboard对象的UIStoryboard instantiateViewController(withIdentifier:)方法。
  2. 要使用nib文件初始化视图控制器对象,请以编程方式创建视图控制器类,然后使用init(nibName:bundle:)方法对其进行init(nibName:bundle:)
  3. 使用loadView()方法为视图控制器指定视图。 在该方法中,以编程方式创建视图层次结构,并将该层次结构的根视图分配给视图控制器的view属性。

Q2。 什么是固有内容大小?

解决方案 :具有基于内容大小的自然大小的视图称为其固有内容大小。 例如,按钮的固有内容大小是其标题的大小加上很小的空白。

Q3。 什么是内容拥抱,抗压缩性,您能否说出视图的默认值?

解决方案 :自动版式使用每个尺寸的一对约束来表示视图的固有内容大小。 内容拥抱将视图向内拉,使其紧贴内容周围。 压缩阻力将视图向外推,因此它不会剪切内容。

这些约束中的每一个都有其自己的优先级。 默认情况下,视图使用250优先级表示内容,并使用750优先级表示抗压缩性。 因此,拉伸视图比收缩视图更容易。

Q4。 考虑以下情形:考虑应用程序中的图像详细信息页面,该页面相对于Superview定位。 但是在iPhone X上,即使此特定视图使用“自动布局”,页面控件在屏幕底部的位置也太低了。 它正在运行到“主页”指示器中。 您将如何解决这个问题?

解决方案 :这里的问题是页面控件的底部约束是相对于超级视图的,超级视图是全屏显示,并且位于“主页”指示器后面。 除了限制超级视图,我们还应该将页面控件限制在底部的“安全区域”布局指南中。 如果我们将其更改为连接到“安全区域”,而不是“超级视图”,那么在iPhone X上,页面指示器将自动向上移到“主页”指示器上方。

Q5。 什么是View自动布局生命周期?

解决方案:在自动布局周期中初始化UIView之后,需要执行3个步骤。

  1. 更新通过 (根据其约束计算视框)
    系统从上到下 (即从超级 视图子视图 updateConstraints()遍历视图层次结构,并为每个视图调用updateConstraints()
  2. 布局阶段 (每个视图的框架都使用在“ 更新”阶段中计算出的矩形进行更新 。)
    它是自下而上发生 ,即系统将视图从 视图遍历到超级视图,并为每个视图调用layoutSubviews
  3. 渲染通道 (负责将像素带到屏幕上)
    此处的关键方法是drawRect 。默认情况下, UIView将所有工作传递到支持CALayer ,后者包含当前视图状态的像素位图。 此步骤与是否为视图启用自动版式无关。

希望这对您有帮助,更多问题请查看- 2018年您必须准备的iOS面试主要问题

参考文献:

  1. https://developer.apple.com/documentation/uikit/uiviewcontroller
  2. https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/AutolayoutPG/AnatomyofaConstraint.html#//apple_ref/doc/uid/TP40010853-CH9-SW1
  3. https://developer.apple.com/videos/play/tech-talks/201
  4. http://www.vadimbulavin.com/view-auto-layout-life-cycle/