ios 关于tableview方法执行顺序为啥会先走判断行高

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios 关于tableview方法执行顺序为啥会先走判断行高相关的知识,希望对你有一定的参考价值。

参考技术A 1

NSDictionary *attrs = @NSFontAttributeName : font;

整个流程的基本思想大概就是:用一个字符串对象来调用此方法,中间需要传入一个属性字典来告知字体和样式,然后根据字符串长度的多少来算出应该给多大的frame。前面传进的size一般可以设置最大宽度。 此方法一般写成分类便于调用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

#import "NSString+Size.h"

@implementation NSString (Size)

/**
* 类方法计算size大小
*/
+ (CGSize)sizeWithString:(NSString *)str andFount:(UIFont *)font andMaxSize:(CGSize)size

NSDictionary *attrs = @NSFontAttri

为啥当我向下滚动iOS(tableView内的collectionview)时取消选择单元格?

【中文标题】为啥当我向下滚动iOS(tableView内的collectionview)时取消选择单元格?【英文标题】:Why cell is deselect when I scroll down iOS (collectionview inside tableView)?为什么当我向下滚动iOS(tableView内的collectionview)时取消选择单元格? 【发布时间】:2020-09-30 08:21:21 【问题描述】:

我在 tableviewcell 中有一个带有 multiselect 的 collectionview。当我向下滚动时 - 选定的单元格被取消选择。 CollectionViewDelegate 和 DataSource 包含在单元格中。 TableView 只包含这个单元格。我认为,当 TableView 尝试重用单元格时会出现问题。

class CategoryCollectionCell: UITableViewCell 
    
    @IBOutlet weak var collectionView: UICollectionView!
    static let identefier = "CategoryCollectionCell"

    private var items: [Value] = [] 
        didSet 
            collectionView.reloadData()
        
    

    override func awakeFromNib() 
        super.awakeFromNib()
        commonInit()
    
    
   
    private func commonInit() 
        collectionView.delegate = self
        collectionView.dataSource = self
        collectionView.allowsMultipleSelection = true
    
    
    func config(items: [Value]) 
        self.items = items
    
    
   


extension CategoryCollectionCell: UICollectionViewDataSource 
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        items.count
    
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CategoryCell.identefier, for: indexPath) as! CategoryCell
        cell.config(text: items[indexPath.row].name)
        cell.layoutIfNeeded()
        return cell
    

【问题讨论】:

【参考方案1】:

在您的func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 中,您必须将单元格设置为已选中(如果之前已选中)。

iOS 在重用之前重置每个单元格。如果显示之前的每个单元格都应该被选中,你必须检查你的数据。

您可以在自定义 UICollectionViewCell 类中设置自定义方法,也可以使用内置函数将单元格设置为选中

cell.isSelected = true

【讨论】:

以上是关于ios 关于tableview方法执行顺序为啥会先走判断行高的主要内容,如果未能解决你的问题,请参考以下文章

IOS关于tableView刷新指定行的一点坑

为啥 Xcode 不执行 func tableView 中的代码?

iOS之tableView性能优化/tableView滑动卡顿?

关于UITableview刷新笔记

java 继承父类 是会先执行父类吗

异常处理关于return语句的执行顺序注意事项