gpt4 book ai didi

ios - 为什么嵌入 UINavigationController 中的 UIVewController 的第一个 subview 的位置会改变?

转载 作者:行者123 更新时间:2023-11-30 13:57:05 24 4
gpt4 key购买 nike

ViewController 嵌入到 UINavigationController 中时,我注意到 ViewController 中的 UITablesViews 出现了一些奇怪的行为>。以下是一个简单原型(prototype)的代码,用于选择要在场景中显示的不同 UITableViews(不包括 TableView 的方法)并选择要显示的 View 。

class ChooseTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

var tableViewA: UITableView = UITableView()
var tableViewB: UITableView = UITableView()

var colors: [String] = ["red", "blue", "green"]
var shapes: [String] = ["triangle", "circle", "square"]

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

tableViewA.frame = CGRectMake(0, 50, 320, 200)
tableViewA.delegate = self
tableViewA.dataSource = self
tableViewA.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cellTableViewA")

tableViewB.frame = CGRectMake(0, 50, 320, 200)
tableViewB.delegate = self
tableViewB.dataSource = self
tableViewB.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cellTableViewB")

self.view.addSubview(tableViewB)
self.view.addSubview(tableViewA)
tableViewB.hidden = true

let segmentSelectorLabels = ["one", "two"]
let segmentSelector = UISegmentedControl(items: segmentSelectorLabels)
segmentSelector.frame = CGRectMake(self.view.frame.width/2 - 50, self.view.frame.height - 100, 100, 40)
self.view.addSubview(segmentSelector)
segmentSelector.selectedSegmentIndex = 0
segmentSelector.addTarget(self, action: "chooseTable:", forControlEvents: .ValueChanged)
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

...
}

以下是 ChooseTableViewController 未嵌入 UINavigationController 和嵌入 UINavigationController 时的结果

Simulators results

在另一个项目中,只需添加即可修复该行为

let emptyView:UIView = UIView()

self.view.addSubiew(emptyView)

其中 emptyView 是第一个添加的 subview 。这是一个将 UITableViews 放置在正确位置的老套解决方案。对此行为的任何见解都值得赞赏。

最佳答案

在属性检查器中取消选中 View Controller 的“调整 ScrollView 插入”或在代码中执行此操作:

self.automaticallyAdjustsScrollViewInsets = NO; (Obj-C)self.automaticallyAdjustsScrollViewInsets = false(Swift)

View Controller

更多解释:

如果此属性设置为 YES/true,则 View Controller (顾名思义)会自动调整其 View 层次结构中第一个 ScrollView 的插图。如果您的 ScrollView /表格 View / TextView / WebView 占据整个屏幕并且其中的一部分通常被状态栏/导航栏/选项卡栏或工具栏隐藏,这会很有帮助。然后这些插图使您的内容显示在顶部栏下方/底部栏上方。不过,只有当 ScrollView /... 是 View 层次结构中的 TOP MOST subview (= 索引 0 处的 subview )时,才会发生这种情况。为了让事情更清楚,我上传了四个示例:

  1. 属性设置为 YES/true 并在 View 层次结构中设置两个 TextView (位于索引 0 和 1 处):如您所见,仅为第一个 ScrollView 设置了插图 01

  2. 属性设置为 NO/false 以及 View 层次结构中的两个 TextView (位于索引 0 和 1 处):如您所见,根本没有设置任何插入 02

  3. 属性设置为 YES/true,一个按钮(索引 0 处的 subview )和两个 TextView (索引 1 和 2 处):正如您所看到的,尽管属性设置为 YES/true,但根本没有设置任何插图。这是因为没有 ScrollView 是 View 层次结构中的最顶层 subview 。 03

  4. 属性设置为 YES/true , View 层次结构中索引 0 处的 TextView 占据整个屏幕:如您所见,尽管 TextView 占据整个屏幕(从 0,0 开始),但文本是不会被状态栏/导航栏隐藏,因为 View Controller 会自动调整 TextView ( ScrollView )的插入。 04

我希望我能帮助让事情变得更清楚一些。 :)

关于ios - 为什么嵌入 UINavigationController 中的 UIVewController 的第一个 subview 的位置会改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33485180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com