gpt4 book ai didi

ios - 第二次旋转后 tableView.tableHeaderView 中的 View 框架错误

转载 作者:行者123 更新时间:2023-11-30 12:41:10 24 4
gpt4 key购买 nike

我想构建一个简单的 Swift 3 iOS 10 应用程序,根据尺寸类别具有两种不同的布局。当我的viewController有一个traitCollection.verticalSizeClass类型 .regular ,我想要我的blueView ( UIView 的子类)为 tableView.tableHeaderView高度为50 。当我的viewController有一个traitCollection.verticalSizeClass类型 .compact ,我想要我的blueView位于左侧(自动布局宽度约束为 240 )和我的 tableView位于右侧。

<小时/>

这是我的UIViewController的代码实例:

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var tableView: UITableView! {
didSet {
tableView.dataSource = self
tableView.delegate = self
}
}
@IBOutlet weak var blueView: UIView!

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
}

override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()

if self.traitCollection.verticalSizeClass == .regular {
blueView.bounds = CGRect(x: tableView.frame.origin.x, y: tableView.frame.origin.y, width: tableView.bounds.width, height: 50)
tableView.tableHeaderView = blueView
} else {
self.tableView.tableHeaderView = nil
}
}

}

以下屏幕截图显示了 Storyboard,场景设置为纵向模式:

enter image description here

以下屏幕截图显示了在横向模式下设置场景的 Storyboard:

enter image description here

完整的项目可以在 Github repo 上找到。 .

<小时/>

启动时一切正常:blueView设置为tableView.tableHeaderView正确的高度为50 。如果我旋转设备,一切仍然正常:blueViewtableView有正确的约束。

但是,如果我第二次旋转设备,blueView消失在 Controller 的视野之外,tableView显示空 tableHeaderView 。我该怎么做才能解决这个问题?

最佳答案

错误的自动布局约束导致了我的问题。我设法通过删除 blueViewconstraints 并通过切换 blueViewtranslatesAutoresizingMaskIntoConstraints 属性来解决这个问题每次旋转。

尽管我怀疑这是解决此问题的最佳方法,但以下代码可以工作并且不会生成自动布局约束错误日志。

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var tableView: UITableView! {
didSet {
tableView.dataSource = self
tableView.delegate = self
}
}
@IBOutlet weak var blueView: UIView!

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
}

override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()

if self.traitCollection.verticalSizeClass == .regular {
blueView.removeConstraints(blueView.constraints)
//blueView.constraints.forEach({ $0.isActive = false }) also works
blueView.translatesAutoresizingMaskIntoConstraints = true
blueView.bounds = CGRect(x: tableView.frame.origin.x, y: tableView.frame.origin.y, width: tableView.bounds.width, height: 50)
tableView.tableHeaderView = blueView
} else {
blueView.removeConstraints(blueView.constraints)
//blueView.constraints.forEach({ $0.isActive = false }) also works
blueView.translatesAutoresizingMaskIntoConstraints = false
self.tableView.tableHeaderView = nil
}
}

}

关于ios - 第二次旋转后 tableView.tableHeaderView 中的 View 框架错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42208153/

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