更改表格宽度时,Swift Tableview 向上移动
Posted
技术标签:
【中文标题】更改表格宽度时,Swift Tableview 向上移动【英文标题】:Swift Tableview moves up when altering table width 【发布时间】:2017-11-06 17:00:51 【问题描述】:我有一个类似于this 的视图,其中我在滚动视图旁边有一个表格视图。
tableview 有一个固定的表格单元高度,没有部分和垂直滚动。 (只是一个标准的表格视图)
scrollview 可以水平滚动,并通过这样做来减小或增加tableview 的宽度。 (而滚动视图则相反)
到目前为止一切正常。
问题在于,当滚动滚动视图(并因此增加或减少 tableview 宽度)时,tableview 只是稍微向上滚动。
我的第一个想法是 tableviewoffset.y 会改变,但显然 offset.y 根本没有改变。
有人知道如何解决这个问题吗?
编辑: 我知道我的问题还不是很清楚。 我构建了一个示例项目来说明它。 (Download link)
按照以下步骤操作。
-
运行项目
将表格视图(左侧)一直向下滚动(编号为 49)
向左或向右拖动“test”
回头看tableview,您会注意到tableview“向上滚动”了。
(步骤 2b 滚动到任何表格单元格编号(1 除外)也会出现问题;编号 49 只是示例)
编辑 2: 问题已经解决了……
插入以下行解决了问题。
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat
return 55
还是谢谢!
(我的视图控制器代码)
class ViewController: UIViewController
@IBOutlet weak var TableView: UITableView!
@IBOutlet weak var ScrollView: UIScrollView!
@IBOutlet weak var scrollViewWidth: NSLayoutConstraint!
@IBOutlet weak var TableViewWidth: NSLayoutConstraint!
var defaultTableViewWidth:CGFloat!
override func viewDidLoad()
super.viewDidLoad()
self.defaultTableViewWidth = self.TableViewWidth.constant
self.scrollViewWidth.constant = 350
extension ViewController : UITableViewDelegate, UITableViewDataSource
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return 55
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 50
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "TabCell", for: indexPath) as! TabCell
cell.clientLabel.text = "E"
cell.debtNumberLabel.text = "\(indexPath.row)"
return cell
func scrollViewDidScroll(_ scrollView: UIScrollView)
print("b - offset: \(self.TableView.contentOffset.y)")
print("b - rowheight: \(self.TableView.rowHeight)")
print("b - cont height: \(self.TableView.contentSize.height)")
if scrollView == ScrollView
if scrollView.contentOffset.x < 0
self.TableViewWidth.constant += abs(scrollView.contentOffset.x)
else if scrollView.contentOffset.x > 0 && self.TableViewWidth.constant >= 60
self.TableViewWidth.constant = max(self.TableViewWidth.constant - scrollView.contentOffset.x, 0.0)
if self.TableViewWidth.constant >= 60
scrollView.contentOffset.x = 0
else
self.TableViewWidth.constant = 60
print("a - offset: \(self.TableView.contentOffset.y)")
print("a - rowheight: \(self.TableView.rowHeight)")
print("a - cont height: \(self.TableView.contentSize.height)")
print(" ")
func animateHeader(height: CGFloat)
self.TableViewWidth.constant = height
UIView.animate(withDuration: 0.4, delay: 0.0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.5, options: UIViewAnimationOptions(), animations:
self.view.layoutIfNeeded()
, completion: nil)
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool)
if self.TableViewWidth.constant > self.defaultTableViewWidth
animateHeader(height: self.defaultTableViewWidth)
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView)
if self.TableViewWidth.constant > self.defaultTableViewWidth
animateHeader(height: self.defaultTableViewWidth)
【问题讨论】:
即使使用您的image,我也不确定您的期望是什么,以及什么是朝着错误的方向发展。能不能说的清楚一点。您可以使用编辑按钮编辑您的帖子,或通过添加注释和方向箭头来使您的图像更清晰。 【参考方案1】:以下信息将有助于调试
您使用什么约束? tableview 框架位置是固定的还是在拖动时会改变?也许有关正在发生的事情的视频将有助于调试此问题。(我还不能发表评论,这就是我将其发布为答案的原因)
【讨论】:
以上是关于更改表格宽度时,Swift Tableview 向上移动的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 在 tableView.selectRow 中更改背景颜色