Как одинаково разместить метки в UIStackView? - PullRequest
0 голосов
/ 25 ноября 2018

В качестве технической оценки работы, за которую я беру интервью, я делаю основную игру для поиска слов, где пользователь ищет переводы данного слова на данном языке.У меня достаточно опыта работы с iOS, но я никогда раньше не создавал динамически генерируемые представления с текстовыми метками во время выполнения и т. Д.

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

Итак.У меня есть представление, встроенное в / контролируемое UINavigationController.У меня есть пара информационных меток вверху, набор кнопок для выполнения действий в нижней части вида, а в основной области просмотра должна быть двумерная сетка символов.Я хотел бы иметь возможность предпринимать действия при касании символа, например выделять символ, если он является частью действительного слова.Мне бы хотелось иметь возможность поддерживать сетки разных размеров, поэтому я не могу просто создать ограниченную сеткой меток или кнопок в Интерфейсном Разработчике с ограничением по разметке.

Я пробовал различные способы отображения 2Dсетка символов, но та, которая, как мне показалось, имела наибольшее обещание, была следующей:

Используйте UITableView для представления строк символов.Внутри каждой ячейки табличного представления используйте UIStackView с динамически генерируемой коллекцией UILabels.

Чтобы заполнить мой UITableView, у меня есть следующее:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = gameGrid.dequeueReusableCell(withIdentifier: "GameGridCell") as! TWSGameGridCell
    if indexPath.row < word.grid.count {
        cell.characters = word.grid[indexPath.row]
        cell.configureCell()
        return cell
    }

    return cell
}

Функция в пользовательском классе ячейки таблицыкоторая настраивает ячейку (в идеале для создания и отображения строки символов):

func configureCell()
{
    self.stackView = UIStackView(arrangedSubviews: [UILabel]())
    self.stackView.backgroundColor = (UIApplication.shared.delegate as! TWSAppDelegate).appBackgroundColor()
    self.stackView.distribution = .fillEqually
    let myRect = self.frame
    self.stackView.frame = myRect
    let characterGridWidth = myRect.width / CGFloat(characters.count)
    for cIndex in 0..<characters.count {
        let labelRect = CGRect(x: myRect.origin.x + (CGFloat(cIndex) * characterGridWidth), y: myRect.origin.y, width: CGFloat(characterGridWidth), height: myRect.height)
        let currentLabel = UILabel(frame: labelRect)
        currentLabel.backgroundColor = (UIApplication.shared.delegate as! TWSAppDelegate).appBackgroundColor()
        currentLabel.textColor = (UIApplication.shared.delegate as! TWSAppDelegate).appTextColor()
        currentLabel.font = UIFont(name: "Palatino", size: 24)
        currentLabel.text = characters[cIndex]
        self.stackView.addArrangedSubview(currentLabel)
    }
}

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

Результирующее представление при запуске в симуляторе представляет собой белое поле, покрывающее столько строк табличного представления, сколько должно быть заполнено строками символов, а остальная часть табличного представления показываетс пользовательским цветом фона, который я использую), согласно этому изображению:

Я пытаюсь, чтобы этот белый прямоугольник имел такой же цвет фона, как и все остальное, и был бы заполнен рядами символов,Чего мне не хватает?

Simulator Screenshot

1 Ответ

0 голосов
/ 25 ноября 2018

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

Также вы можете добавить следующее после инициализации вашего stackView внутри вашего метода configureCell:

self.stackView.axis = .horizontal

Редактировать: исходя из комментария ниже, решение было создать ярлыки (хотя я переключился на кнопки для дальнейшей функциональности), добавить их все в [UIButton], а затем использовать это для создания UIStackView(self.stackView = UIStackView(arrangedSubviews: buttons)).

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