Стековый вид пользовательской ячейки UITableView не может обнаружить размер Super View - PullRequest
0 голосов
/ 24 февраля 2019

Контекст У меня есть UITableViewController с пользовательскими ячейками, созданными в файле .xib.В этом файле .xib я пытаюсь установить динамическую ширину, чтобы разделить ширину ячейки на три подпредставления.

Проблема заключается в том, что ячейка не может получить нужную ширину, из-за чего ячейка не заполняет всю ширину.Вот картинка, чтобы лучше проиллюстрировать то, что я говорю.

cell_not_filling_width

Мое понимание (может быть, это совершенно неправильно понимается) Установка ограничения кадрав .xib файл не годится, т.к. программа не будет знать ширину до времени выполнения.Другими словами, awakeFromNib (1.) загружается до того, как будет определена ширина экрана ... Так что, как решить эту проблему ... Любое руководство будет с благодарностью.

  1. Предположительно, это гдеширина установлена ​​- ширина моего конструктора интерфейса, когда я смотрю на файл .xib, одинакова, когда я распечатываю его в cellForRowAt

Примечания Вмоя функция viewDidLoad Я зарегистрировал nibfile как таковой, поэтому я не думаю, что это проблема.tableView.register(UINib(nibName: "NewTableViewCell", bundle: nil) , forCellReuseIdentifier: "newTableViewCell").

Вот некоторый код, который может иметь значение.

NewTableViewCell.swift

import UIKit

class NewTableViewCell: UITableViewCell {

    @IBOutlet var typeLabel: UILabel!
    @IBOutlet var timeLabel: UILabel!
    @IBOutlet var completedLabel: UILabel!
    @IBOutlet var correctLabel: UILabel!
    @IBOutlet var parentView: UIView!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

}

parentView - это представление, содержащее три подпредставления.

Вот изображение файла .xib

Вот изображение моих ограничений на файл .xib (кажется, загромождено)

ОБНОВЛЕНИЕ Опробовал подход представления стека: XCode просто определяет ширину как подпредставление с наибольшей шириной (в зависимости от размера текста)

Здесь это изображение текущей ситуации и текущих ограничений

Я подумал, что ограничения на метке также могут иметь отношение:

UPDATE2 OkЯ думаю, что нашел проблему;По сути, вид стека не может определить длину и ширину суперразмера и его размер.

ПРИМЕЧАНИЕ Я отредактировал ограничения.

Здесь это то, на что это похоже, если я устанавливаю ширину и высоту постоянным значением.Представление стека фактически перейдет к установленным ограничениям

Здесь - это то, на что это похоже, если я уберу эти ограничения.Таким образом, кажется, что ширина и высота равны 0. Поэтому я считаю, что ограничения не принимаются из супер-представления.

Кто-нибудь знает, как это исправить?

1 Ответ

0 голосов
/ 26 февраля 2019

Попробуйте приведенный ниже код в cellforRow.

Добавьте IBOutliet для stackviewWidth и установите его динамически, как показано ниже.Также проверьте, идет ли ячейка на всю ширину устройства, добавив в нее цвет фона.

if  let appDelegate =  UIApplication.shared.delegate as? AppDelegate,
    let window = appDelegate.window {
    cell.stackViewWidthConstraint = window.bounds.width
}
...