更改表格宽度时,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 向上移动的主要内容,如果未能解决你的问题,请参考以下文章

单元格宽度对于 tableview 宽度来说太大了

使用 swift 向 tableview 单元格添加约束

iOS Swift - 如何更改表格视图的背景颜色?

Swift - 在 tableView.selectRow 中更改背景颜色

调整 TableView 大小时,Swift 3.0 表格单元格未填充

向关系中插入新数据时如何更新tableView