在模态显示的 UIViewController 中使用 UITableView 时的奇怪行为
Posted
技术标签:
【中文标题】在模态显示的 UIViewController 中使用 UITableView 时的奇怪行为【英文标题】:Odd behaviour when using UITableView in a UIViewController that is presented Modally 【发布时间】:2015-08-24 01:33:44 【问题描述】:将UITableView
放入以模态(表单)形式呈现的UIViewController
时,我发现了一个奇怪的行为
由于编码错误而修复:由于某些原因,表格视图在每组中显示 2 组标签 仅设置 1 时的单元格。第一组显示原始标签 名称然后直接在顶部是编码文本。看 iPhone4s 屏幕 射击。
在 iPad 上,即使表格、单元格和 contentView 已设置为 clearColor,表格视图也是白色的。请参阅 iPad 屏幕截图。
iPad 屏幕截图:
iPhone 屏幕截图:
这是一个测试代码,用于查看我在主应用程序中的编码是否有错误。
class TestTableView:UIViewController, UITableViewDelegate, UITableViewDataSource
@IBOutlet weak var testTable: UITableView!
var data = ["One", "Two", "Three"]
override func viewDidLoad()
super.viewDidLoad()
self.testTable.delegate = self
self.testTable.dataSource = self
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
println(self.data.count)
return self.data.count
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
var cell = tableView.dequeueReusableCellWithIdentifier("testCell", forIndexPath: indexPath) as! testTableCell
cell.testTableCell!.text = self.data[indexPath.row]
return cell
class testTableCell:UITableViewCell
@IBOutlet weak var testTableCell: UILabel!
override func layoutSubviews()
super.layoutSubviews()
有趣的是 println(self.data.count) 打印了 4 次。
任何人都可以在我的代码中看到问题吗?或者这是一个错误?
任何反馈都会有所帮助..
【问题讨论】:
你应该使用cell.testTableCell.text = xxx
而不是cell.textLabel!.text = xxx
。
在模拟器中运行应用程序时,点击代码编辑器下 Xcode 中的 Debug View Hierarchy 按钮。这将允许您分层查看界面。也许您有一个或多个重复的控件或其他东西......
@Bannings。错过这一点感到有点愚蠢。该死的自动完成功能挫败了我。哈哈。然而问题仍然存在,在 ipad 上,桌子的背景仍然是白色的。有什么想法吗?
两个屏幕截图中的表格都比显示的视图窄得多。为什么?呈现的视图是什么? (紫色的东西……)显然不是桌子,那么实际呈现的是什么?您需要更多地解释这里的架构。您的信息太少,无法复制。
正如我在描述中所说,视图以模态方式呈现(表单)。视图具有紫色背景,并且表格周围有很大的空白。测试在 iPad Air 上进行。然而,不透明的单元格似乎与它的模态无关。我在使用“show”时遇到了同样的问题。
【参考方案1】:
我已经解决了这个问题,但我不确定这是一个错误。由于某种原因,在 IB 中设置单元格的背景颜色在 iPad 上不起作用。
将单元格代码更改为此有效。
class testTableCell:UITableViewCell
@IBOutlet weak var testTableCell: UILabel!
override func layoutSubviews()
super.layoutSubviews()
self.backgroundColor = UIColor.clearColor()
没有其他人遇到过这个问题吗?
【讨论】:
所以看起来像是ios7中引入的一个bug。看这里。 ***.com/questions/18901394/…。我很惊讶苹果竟然放过这个。以上是关于在模态显示的 UIViewController 中使用 UITableView 时的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章
模态 UIViewController 总是在 iPad 上全屏显示。为啥?
当 UIViewController 模态显示时,UINavigationController(在 UITabBarController 选项卡内)丢失堆栈
使用选项 UIModalPresentationOverCurrentContext 减小模态显示的 uiviewcontroller 的帧大小