Swift 3 - UITableView 在 UIScrollView 中被切断

Posted

技术标签:

【中文标题】Swift 3 - UITableView 在 UIScrollView 中被切断【英文标题】:Swift 3 - UITableView is cut off in UIScrollView 【发布时间】:2017-05-12 08:45:19 【问题描述】:

我在滚动视图中的表格视图有问题。桌子最后被切断了。

这是我的故事板(表格已禁用滚动)。该按钮只是我真实应用中某些内容的占位符:

这是表类(我从昨天的问题中知道它只是无法弄清楚问题所在):

class Table: UITableView, UITableViewDataSource, UITableViewDelegate

    let sections: [String] = ["Section 1", "Section 2", "Section 3"]
    let s1Data: [String] = ["Row 1", "Row 2", "Row 3"]
    let s2Data: [String] = ["Row 1", "Row 2", "Row 3"]
    let s3Data: [String] = ["Row 1", "Row 2", "Row 3"]

    var sectionData: [Int: [String]] = [:]

    override func awakeFromNib() 
        super.awakeFromNib()

        delegate = self
        dataSource = self

        register(UINib(nibName: "Cell", bundle: nil), forCellReuseIdentifier: "Cell")

        sectionData = [0:s1Data, 1:s2Data, 2:s3Data]

        rowHeight = UITableViewAutomaticDimension
        estimatedRowHeight = 96.0

    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int)
        -> Int 
            return (sectionData[section]?.count)!
    

    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int)
        -> String? 
            return sections[section]
    

    func numberOfSectionsInTableView(tableView: UITableView) -> Int 
        return sections.count
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

        var cell = tableView.dequeueReusableCell(withIdentifier: "Cell")

        return cell!

    


单元格本身的高度为 340,在表格中应该是三个。

ViewController 对表格的高度和表格本身都有约束。我在 *** 上读到了一些关于这个解决方案的内容。当我在约束常量集设置断点时,高度约为 1000,所以此时这是正确的。:

import UIKit

class ViewController: UIViewController 

    @IBOutlet weak var tableHeight: NSLayoutConstraint!
    @IBOutlet weak var table: Table!

    override func viewDidLoad()  
        super.viewDidLoad()  
    

    override func viewDidAppear(_ animated: Bool) 
        super.viewDidAppear(animated)
        tableHeight.constant = table.contentSize.height
    


我尝试了不同的建议来摆脱问题。但不知何故,我错过了一些东西。有没有人可能对我的建议。

【问题讨论】:

您的问题解决了吗? 【参考方案1】:

在我看来,您没有设置从 tableview 底部到它的 superview 底部的约束(滚动视图中的视图)。如果是这样,那么视图将不会调整大小以适应其中的所有表格

【讨论】:

【参考方案2】:

我已根据您的要求设置了所有约束 ,我已经安装了 top , left , right 和 bottom 约束 ScrollView 和 ContentView 并赋予 相等的宽度和高度 contentView 到主视图,因此滚动视图将自动获取 比其内容大小更大。

如果你只想滚动 ScrollView 而不是你的 tableView 那么在这个 如果你可以给 TableView 一个固定的高度约束,创建一个 @IBOutlet 的 NSLayoutConstraint 的固定高度的 Constarint 并更新它 通过计算所有行高来保持不变!

第一种方法:

移除固定高度约束 尝试将 tableView 的底部约束赋予 ScrollView(不是 到 contentView -(在 ScrollView 中的 UIView))

第二种方法:

在 viewDidLoad 方法中试试这个:

从底部给 tableView 填充:

这里我给tableView底部一个20.0的固定填充,你可以根据你的要求给。

yourTableView.contentInset = UIEdgeInsets(top: 0.0, left: 0.0, bottom: 20.0, right: 0.0)

这里是演示链接:https://drive.google.com/file/d/0B-VsxWuYK8apODhXSnc1aVM5djQ/view

【讨论】:

你遇到了什么错误 @SohilR.Memon ,并告诉我你给 tableView 哪个约束。 您熟悉自动布局吗? UITableView 应该得到固定的高度,因为它内部有自己的UIScrollView,所以它会与contentSize 发生冲突。你可以自己试试! @SohilR.Memon 我非常熟悉 AutoLayout 而不是你的,而且我创建了自己的演示,它的工作非常适合我! 请通过 Dropbox 向我发送演示链接!我需要了解你是如何做到的! @SohilR.Memon 这里是链接:下载并运行它drive.google.com/open?id=0B-VsxWuYK8apODhXSnc1aVM5djQ

以上是关于Swift 3 - UITableView 在 UIScrollView 中被切断的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 - UITableView 在 UIScrollView 中被切断

UIViewController 内的 UITableView 没有响应(Swift 3.0)

如何在 Swift 3 中使这个 UITableView 清晰(透明)

Firebase 与 Swift 3.0 UITableView

在按钮按下 swift 3 时获取 UITableView 单元格的行

如何使用关系 Swift 3 显示 UITableView