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