我需要实现附图的场景。 当我尝试实现底层表格时,我遇到了一些问题。
底部表格有以下要求:
前2行应贴在头部,不允许向上/向下滚动。我使用表格部分来实现。
所有其他行都可以向上/向下滚动并可点击。我使用表格视图来实现
由于app支持更大的文本,当文本更大时,屏幕大小无法显示所有tableView,因此在这种情况下,整个tableview应支持水平滚动。
当tableview行数据与" currentBitting"不同时,其值为" 33342431",单个标签应显示背景颜色。
< / LI>每列应与表格对齐
以下是我如何实施的想法:
为了实现所有这些要求,我使用tableView来实现。数组项中的每个字符都使用标签来显示。
我使用最大宽度和常规宽度来定义每列的宽度
当文本字体大小改变时,我尝试设置底部的tableView contentSize =&#34; viewWillLayoutSubViews()&#34;
我为剖面头添加了背景颜色,否则,当底部桌面视图向上滚动时,它将与剖面头部重叠,并且屏幕外文本背景颜色不会渲染。所以我添加了部分头部背景颜色以避免这个问题。
目前,问题是水平滚动不起作用。很奇怪。
老实说,我尝试了很多方法:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let recognizer = scrollView.panGestureRecognizer
let distance = recognizer.translation(in: scrollView)
let deltaHeight:CGFloat = parentScrollView.contentSize.height - parentScrollView.frame.height
let goingUp = distance.y < 0 //going up
if distance.y != 0 {
if goingUp {
parentScrollView.contentOffset.y = 0
switch recognizer.state {
case .began,.changed:
if bottomTableview.contentOffset.y < deltaHeight {
bottomTableview.contentOffset.y -= distance.y
recognizer.setTranslation(.zero, in: scrollView)
}
case .ended:
if bottomTableview.contentOffset.y > deltaHeight{
bottomTableview.contentOffset.y = deltaHeight
UIView.animate(withDuration: 0.1, animations: {
scrollView.layoutIfNeeded()
})
}
default:
break
}
}
else{
switch recognizer.state {
case .began,.changed:
if bottomTableview.contentOffset.y > 0 {
bottomTableview.contentOffset.y -= distance.y
recognizer.setTranslation(.zero, in: scrollView)
}
case .ended:
if bottomTableview.contentOffset.y < 0 {
bottomTableview.contentOffset.y = 0
UIView.animate(withDuration: 0.1, animations: {
scrollView.layoutIfNeeded()
})
}
default:
break
}
}
}
}
有没有人有更好的想法来实施这个案例?非常感谢您的帮助。
在表格视图中使用的数据是:
let extensionCodeArray = ["Position", "Current Bitting", "11407", "10253", "10492", "14195", "11665", "10547", "12332", "12536", "10211", "11034", "10725", "11036", "12928"]
let extensionResultBitting = ["12345678", "33342431", "33133244", "33243134", "32343134", "33134243", "31343234", "33342134", "31344233", "34342133", "31334342", "33134342", "34343132", "34231343", "32431343"]
答案 0 :(得分:0)
对于您尝试的第一个解决方案。
UITableView
是UIScrollView
的子类,这意味着UITableView
也有scrollViewDidScroll(_ scrollView: UIScrollView)
个事件。
要解决此问题,您只需执行以下操作即可。将标记设置为tableView或scrollView以识别它 1.例如,要标识scrollView,请在初始化scrollView之后添加以下行。
scrollView.tag = 101
func scrollViewDidScroll(_ scrollView: UIScrollView)
func scrollViewDidScroll(_ scrollView: UIScrollView)
{
if scrollView.tag == 101 {
// Triggered by scrollView
} else {
// Triggered by tableView
}
}
答案 1 :(得分:0)
我解决了这个问题。这个想法如下:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize --> return CGSize(width: contentSize.width, height: collectionView.frame.size.height)
cotentSize是预先计算出的最终表格
UICollectionViewCell
数据源和tableView
的{{1}}进行客户关注。 delegate
的所有datasource
来自tableView
中定义的protocol
。 Outerside UICollectionViewCell
是collectionView
delegate
醇>
完成。