`tableView` 在选择单元格时向上移动
Posted
技术标签:
【中文标题】`tableView` 在选择单元格时向上移动【英文标题】:`tableView` moves up while selecting Cell 【发布时间】:2016-09-09 07:06:42 【问题描述】:在我的视图控制器中,我有一个tableView
,加班时我选择了我的单元格,我的tableview
有点向上移动我不知道为什么会发生,我试图弄清楚为什么会发生,但我什么也没得到。下面是我的代码,如果有人能找出问题所在,那对我很有帮助。
出口和变量:
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var headerView: UIView!
@IBOutlet var verticalSpaceConstraint: NSLayoutConstraint!
var lastVerticalOffset: CGFloat = 0
在ViewDidLoad:
tableView.contentInset = UIEdgeInsets(top: headerViewOriginalHeight, left: 0, bottom: 0, right: 0)
tableView.scrollIndicatorInsets = tableView.contentInset
lastVerticalOffset = tableView.contentOffset.y
...........
footerView.addSubview(footerLabel)
footerView.addSubview(footerRetryButton)
footerView.addSubview(activityIndicatorView)
self.tableView.tableFooterView = footerView
代表:
extension myViewController: UITableViewDelegate, UITableViewDataSource
func numberOfSectionsInTableView(tableView: UITableView) -> Int
return 1
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return reviewsArray.count
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! TagDetailTableViewCell
..............................
return cell
func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
return UITableViewAutomaticDimension
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
if indexPath == selectedIndexPath
return UITableViewAutomaticDimension
else
return 100
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
tableView.beginUpdates()
if indexPath == selectedIndexPath
selectedIndexPath = NSIndexPath()
else
selectedIndexPath = indexPath
tableView.endUpdates()
print( "tableView ORIIGN Y AFETER ", tableView.contentOffset.y)
self.tableView.separatorStyle = .None
self.tableView.separatorStyle = .SingleLine
【问题讨论】:
【参考方案1】:您将在 DidSelect 方法中删除 tableView Reload 的代码。删除tableView.beginUpdates()
和tableView.endUpdates()
,现在你只需要重新加载TableView的Single Cell。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
if indexPath == selectedIndexPath
selectedIndexPath = NSIndexPath()
else
selectedIndexPath = indexPath
NSArray* rowsToReload = [NSArray arrayWithObjects:indexPath, nil];
[myUITableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];
self.tableView.separatorStyle = .None
self.tableView.separatorStyle = .SingleLine
【讨论】:
【参考方案2】:从didselectrow
方法中删除tableView.beginUpdates()
和tableView.endUpdates()
。你不需要在这种情况下使用它!
管理数组以跟踪所选行并相应地管理 cellforrow
并从 didselectrow
重新加载表。
或者在你的viewDidload
试试
self.automaticallyAdjustsScrollViewInsets = false
【讨论】:
嘿伙计,感谢您的回复,我正在使用tableView.beginUpdates()
,因为我正在更改所选行的高度,而self.automaticallyAdjustsScrollViewInsets = false
没有用以上是关于`tableView` 在选择单元格时向上移动的主要内容,如果未能解决你的问题,请参考以下文章
选择 TableView 单元格时无法显示另一个 ViewController
Swift - 选择 TableView 单元格时动画(didSelectRowAtIndexPath)