Подвиды UITableViewCell отображаются за пределами ячейки - PullRequest
0 голосов
/ 15 января 2020

В разделе моего UITableView есть 5 ячеек, три из которых были настроены на развертывание / свертывание для предоставления более подробного представления при выборе. Одна из этих ячеек показывает диаграмму количества маленьких квадратов, которая отображается идеально, пока другая ячейка не будет расширена, например:

Working Cell

Когда ячейка свернута, однако, подпредставления в ячейке отображаются в разных ячейках, в разных разделах, например:

enter image description here

и это:

enter image description here

Чтобы создать подпредставления в ячейке, это мой код в методе cellForRow, который просто использует массив UIViews:

for vote in vote_array {
    cell.contentView.addSubview(vote as? UIView ?? UIView.init(frame: CGRect.init(x: 0, y: 0, width: 0, height: 0)))
            }

Я попытался удалить все подпредставления, прежде чем добавить их, выполнив это, но это ничего не меняет:

for subview in cell.contentView.subviews {
                subview.removeFromSuperview()
            }

Редактировать: это внутри оператора switch, но здесь соответствующая ячейка / регистр cellForRow:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.contentView.clipsToBounds = true
            cell.clipsToBounds = true
            let vote_array = getVoteArray()

            for subview in cell.contentView.subviews {
                subview.removeFromSuperview()
            }

            for case let vote as UIView in vote_array {
                cell.contentView.addSubview(vote)
            }

Редактировать: ядро ​​getVoteArray:

func getVoteArray() -> NSMutableArray {
    var i = 0
    var x = 20
    var y = 4
    let blockViews : NSMutableArray = []
    for color in blocks {
        let block = UIView.init(frame: CGRect.init(x: x, y: y, width: 20, height: 20))
        block.backgroundColor = color as? UIColor
        blockViews.add(block)
        x = x + 24
        i = i + 1
        if i == num_blocks_per_row { i = 0; y = y + 24; x = 20 }
    }
    diagramHeight = y + 24
    return blockViews
}

Кажется, я не могу понять, почему подпредставления генерируются случайным образом по всему tableView.

Ответы [ 3 ]

1 голос
/ 15 января 2020

Попробуйте реализовать уникальные ReuseIdentifiers для свернутых и развернутых состояний.

Если ячейка свернута, не загружайте все эти виды в ней, удалив из нее свернутую ячейку, где высота всех эти значения UIViews либо равны 0, либо они не добавляются в подпредставление.

Если ячейка развернута, чем deque расширенная ячейка, в которой представления расположены так же, как на первом снимке экрана.

После расширения и или свернутый вызов tableview.reloadData ()

1 голос
/ 15 января 2020

Закончено добавление

for case let cell as UITableViewCell in tableView.subviews {
    for subview in cell.contentView.subviews {
        if subview.tag == 115 {
            subview.removeFromSuperview()
        }
    }
}

к моему методу didSelectRowAt после добавления тега при создании каждого представления. Я до сих пор не уверен, почему представления были добавлены в разные ячейки, но это как минимум избавило их.

0 голосов
/ 15 января 2020

Раньше go было очень долго, когда UIViews обрезал своих детей, но это не было правдой в течение очень долгого времени. Если вы хотите вырезать, вам нужно либо изменить UIView.clipsToBounds на true, либо использовать базовое свойство CALayer maskToBounds.

cell.contentView.clipsToBounds = true

Или вы можете установить флажок в раскадровке / перо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...