gpt4 book ai didi

ios - Swift:当tableView宽度大于屏幕尺寸时如何处理tableView?

转载 作者:行者123 更新时间:2023-11-28 07:49:16 24 4
gpt4 key购买 nike

我需要实现的场景附上图片。当我尝试实现底部表单时,我遇到了一些问题。

底部表单有以下要求:

  1. 前 2 行应该固定在头部,并且不允许向上/向下滚动。我用table section head来实现。

  2. 所有其他行都可以向上/向下滚动并可点击。我用tableview来实现

  3. 由于应用支持大文本,当文本变大时,屏幕尺寸无法显示所有的tableView,所以在这种情况下,整个tableview应该支持水平滚动。

  4. 当 tableview 行数据与值为“33342431”的“currentBitting”不同时,单个标签应显示背景色。

  5. 每一列都应该与表格对齐

以下是我如何实现的想法:

  1. 为了实现所有这些需求,我使用tableView来实现。数组项中的每个字符都使用标签来显示。

  2. 我使用最大宽度和常规宽度来定义每列的宽度

  3. 当文本字体大小改变时,我尝试设置底部的tableViewcontentSize = "viewWillLayoutSubViews()"中当前新内容的大小

  4. 我为部分标题添加了背景颜色,否则,当底部表格 View 向上滚动时,它会与部分标题重叠,并且屏幕外文本背景颜色不会呈现。所以我添加了section head background color来避免这个问题。

目前的问题是水平滚动不起作用。很奇怪。

说实话,我试了很多方法:

  1. bottom form首先使用一个父scrollView,然后放一个子tableView。问题:顶部标题很难粘住或垂直滚动​​不顺畅。我粘贴了我的 scrollViewDidScroll 部分。有用。但是垂直滚动不是那么流畅。如果有人可以帮助改进它,我将不胜感激。
    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
}
}
}
}


  1. Collection View 到实现。但是我不知道如何选择整行来获取数据以及如何粘贴顶部标题

有没有人有更好的想法来实现这个案例?非常感谢您的帮助。

TableView 中使用的数据是:

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"]

ScreenShot

最佳答案

我解决了这个问题。思路如下:

  1. 定义一个 Collection View ,设置它的numberOfItemsInSection = 1
  2. 对于collectionView,设置它的
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize --> return CGSize(width: contentSize.width, height: collectionView.frame.size.height)

cotentSize是为最终形式提前计算好的

  1. 自定义UICollectionViewCell,其中实现了tableView数据源和delegatetableView 的所有datasource 都来自UICollectionViewCell 中定义的protocol。外部 collectionViewprotocol
  2. delegate

完成。

关于ios - Swift:当tableView宽度大于屏幕尺寸时如何处理tableView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50125566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com