可重用单元格中的 UIScrollView 位置影响其他单元格中的 UIScrollView 位置
UIScrollView position in reusable cell affecting UIScrollView position in other cell
我正在使用 Swift 构建一个 iOS 应用程序,用户可以在其中上下滚动图像源(如 instagram),也可以在单元格上向左或向右滚动以查看更多图片。参考this album(暂时不能上传图片)UI的布局见F1
我的问题是当我滚动到图像 1C 时,第 3 个单元格也滚动到 3C。所以当我向下滚动到第三个单元格时,它已经在 3C。参见 F2。
此外,如果我将第 3 个单元格滚动到 3B,它还会将第一个单元格重新定位到 1B。参见 F3。
我需要一些帮助来了解正在发生的事情...
我为具有加载图像功能的单元格创建了自定义 class。
(我还初始化了 imageView 框架、scrollView 框架和内容大小,以及我没有包含在下面的代码中的其他属性。)
class CustomCell: UITableViewCell {
var imageView1: UIImageView = UIImageView()
var imageView2: UIImageView = UIImageView()
var imageView3: UIImageView = UIImageView()
func loadImages(#image1: String, image2: String, image3: String){
imageView1.image = UIImage(named: image1)
imageView2.image = UIImage(named: image2)
imageView3.image = UIImage(named: image3)
}}
在我的视图控制器中 - cellForRowAtIndexPath
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:CustomCell = self.tableView.dequeueReusableCellWithIdentifier("CustomCell") as CustomCell
var (firstImage, secondImage, thirdImage) = images[indexPath.row]
cell.loadImages(image1: firstImage, image2: secondImage, image3: thirdImage)
return cell
}
仅供参考:这似乎只发生在视图是根视图控制器时。呈现视图后它工作正常。 ???
谢谢!
可重复使用的意思就是:为了加快速度,细胞被重复使用。但是当您更改视图属性时,当单元格填充新值时,这些属性就会出现。在 cellF 或 RiwAtIndexPath 或 – 更清洁的恕我直言 – 在 cellWillDisplay 中将值重新设置为 population。
UITableView 出列 个可重复使用的单元格。这意味着您的单元格中的水平滚动视图将与他出列的单元格具有相同的内容偏移量。因此,如果您滚动到单元格 1 中的 contentOffset.x = 100.0,而不是在您的表格视图中向下滚动,则可能会发生以下单元格之一的滚动视图子视图具有相同的 contentOffset。
只需在 cellForRowAtIndexPath
中设置 contentOffset.y = 0
。
或者更好:保存单元格的选定 imageIndex 并设置适当的 contentOffset。
我正在使用 Swift 构建一个 iOS 应用程序,用户可以在其中上下滚动图像源(如 instagram),也可以在单元格上向左或向右滚动以查看更多图片。参考this album(暂时不能上传图片)UI的布局见F1
我的问题是当我滚动到图像 1C 时,第 3 个单元格也滚动到 3C。所以当我向下滚动到第三个单元格时,它已经在 3C。参见 F2。
此外,如果我将第 3 个单元格滚动到 3B,它还会将第一个单元格重新定位到 1B。参见 F3。
我需要一些帮助来了解正在发生的事情...
我为具有加载图像功能的单元格创建了自定义 class。 (我还初始化了 imageView 框架、scrollView 框架和内容大小,以及我没有包含在下面的代码中的其他属性。)
class CustomCell: UITableViewCell {
var imageView1: UIImageView = UIImageView()
var imageView2: UIImageView = UIImageView()
var imageView3: UIImageView = UIImageView()
func loadImages(#image1: String, image2: String, image3: String){
imageView1.image = UIImage(named: image1)
imageView2.image = UIImage(named: image2)
imageView3.image = UIImage(named: image3)
}}
在我的视图控制器中 - cellForRowAtIndexPath
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:CustomCell = self.tableView.dequeueReusableCellWithIdentifier("CustomCell") as CustomCell
var (firstImage, secondImage, thirdImage) = images[indexPath.row]
cell.loadImages(image1: firstImage, image2: secondImage, image3: thirdImage)
return cell
}
仅供参考:这似乎只发生在视图是根视图控制器时。呈现视图后它工作正常。 ???
谢谢!
可重复使用的意思就是:为了加快速度,细胞被重复使用。但是当您更改视图属性时,当单元格填充新值时,这些属性就会出现。在 cellF 或 RiwAtIndexPath 或 – 更清洁的恕我直言 – 在 cellWillDisplay 中将值重新设置为 population。
UITableView 出列 个可重复使用的单元格。这意味着您的单元格中的水平滚动视图将与他出列的单元格具有相同的内容偏移量。因此,如果您滚动到单元格 1 中的 contentOffset.x = 100.0,而不是在您的表格视图中向下滚动,则可能会发生以下单元格之一的滚动视图子视图具有相同的 contentOffset。
只需在 cellForRowAtIndexPath
中设置 contentOffset.y = 0
。
或者更好:保存单元格的选定 imageIndex 并设置适当的 contentOffset。