在模态显示的 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

当 UIViewController 模态显示时,UINavigationController(在 UITabBarController 选项卡内)丢失堆栈

使用选项 UIModalPresentationOverCurrentContext 减小模态显示的 uiviewcontroller 的帧大小

iOS5:在模态 UIViewController 中播放 Youtube 视频时 UIWebView 出现异常

ios 8 应用程序扩展以显示 UIAlertView 之类的视图而不是模态 UIViewController?