首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学习iOS中的视图层次结构

问学习iOS中的视图层次结构
EN

Stack Overflow用户
提问于 2015-08-09 19:08:33
回答 1查看 182关注 0票数 1

在编写了下面提到的代码之后,

代码语言:javascript
复制
//
//  FirstCustomSegue.swift
//  Prayer
//
//  Created by Jae Hyun Kim on 8/9/15.
//  Copyright (c) 2015 Jae Hyun Kim. All rights reserved.
//

import UIKit

class FirstCustomSegue: UIStoryboardSegue {
    override func perform() {
        var firstVCView = self.sourceViewController.view as UIView!
        var secondVCView = self.destinationViewController.view as UIView!
        let screenWidth = UIScreen.mainScreen().bounds.size.width
        let screenHeight = UIScreen.mainScreen().bounds.size.height
        secondVCView.frame = CGRectMake(0.0, screenHeight, screenWidth, screenHeight)
    }
}

我正在阅读的一篇教程中的一条语句说,“此时,第二个视图控制器的视图还不是应用程序窗口的子视图。因此,在实现实际动画之前,我们显然必须将其添加到窗口中。这将使用应用程序窗口对象的insertSubview( view :insertSubview:)方法来实现。接下来,您将看到,我们首先访问窗口对象,然后添加目标视图:”然后他将添加以下代码:

代码语言:javascript
复制
override func perform() {
    ...

    // Access the app's key window and insert the destination view above the current (source) one.
    let window = UIApplication.sharedApplication().keyWindow
    window?.insertSubview(secondVCView, aboveSubview: firstVCView)

}

然而,我不太清楚他的意思是什么,当他说“在这一点上,第二个视图控制器的观点不是一个subview...and之类的”这是什么意思?我会更具体地说明我的问题是什么声明,例如什么是“子视图”的含义。但我对这份声明的所有内容都很困惑。对不起:(

secondVCView.frame = CGRectMake(0.0, screenHeight, screenWidth, screenHeight),这句话是什么意思?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-09 21:41:22

视图层次结构是了解iOS用户界面的核心元素之一。基本上说,屏幕上的所有视图都是相互关联的--子视图、父视图、兄弟视图。

  • 子视图只是嵌套在另一个视图中的视图,是该视图的子视图。
  • 父视图/超级视图是对应视图--某些东西嵌套在其中的视图是它的超级视图。
  • 同级视图是包含在同一个父视图中的视图。

注意,对于不同的视图,视图可以同时是三个角色。如果viewA包含viewB和viewC,而viewB包含viewD,那么

  • viewA是viewB和viewC的超级视图
  • viewB和viewC是viewA的子视图
  • viewA和viewB是兄弟姐妹
  • viewB是viewD的超级视图
  • viewD是viewB的一个子视图
  • => viewB完成了这三个角色。

屏幕上的所有内容都必须是视图层次结构的一部分,这样操作系统才能确定要呈现的位置。

视图层次结构的一个非常重要的事情是视图的相对定位。定位总是相对于ones。在同级视图和其父视图之间,可以设置布局约束(-> Autolayout)来管理它们的布局。

注意到,这是一个相当简短的概述,而且远不完美,我强烈建议您至少阅读一次关于 view hierarchy 的苹果文档。

关于你们的问题:

“在这一点上,第二个视图控制器的观点不是subview...and之类的”这是什么意思?

也就是说,视图并不是解释的层次结构的一部分。因此,操作系统还不知道在哪里放置它-实际上,它甚至不知道它应该呈现它。要解决这个问题,您必须在层次结构中的某个位置添加视图,方法是选择视图并将新视图添加为子视图。

secondVCView.frame = CGRectMake(0.0, screenHeight, screenWidth, screenHeight),这句话是什么意思?

该行将secondVCView框架的secondVCView属性设置为等于新创建的具有指定维度的CGRect。frame确定视图的位置和大小。理解该属性及其对应方对于理解视图及其层次结构是如何工作的同样重要。幸运的是,有this answer on SO很好地涵盖了这个主题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31907863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档