Позиционирование элементов в UITableViewCell - PullRequest
0 голосов
/ 20 октября 2018

У меня есть класс для ячейки

import UIKit

class LinkCellView: UITableViewCell {
    @IBOutlet weak var cellTitleLabel: UILabel!
    @IBOutlet weak var tagsListView: UIView!

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

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

Table View Cell in IB

Я заполняю tagsListView в cellForRowAt

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "linkCell", for: indexPath) as! LinkCellView
    let object = links[indexPath.row]

    cell.cellTitleLabel!.text = object.description
    let tag = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
    tag.text = "Frkul"
    cell.tagsListView.addSubview(tag)

    return cell
}

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

Resulting cell on iOS

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

  • Xcode Version 10.0
  • iOS 12
  • Симулятор iOS версии 10.0

Статическая версия приложения - https://gitlab.com/lipoqil/stackview-in-table-cell

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Хорошо, по какой-то причине, если я использую UIStackView вместо UIView, он отображается почти так, как я хочу.

Table rows in simulator

В нем вводится одно изменение в коде

cell.tagListView.addSubview(tag)cell.tagListView.addArrangedSubview(tag)

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "linkCell", for: indexPath) as! LinkCellView
    cell.tagListView.subviews.forEach { $0.removeFromSuperview() }
    let object = links[indexPath.row]

    cell.cellTitleLabel!.text = object.description
    let tag = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
    tag.shadowColor = .blue
    tag.text = object.tags
    cell.tagListView.addArrangedSubview(tag)

    return cell
}

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

0 голосов
/ 24 октября 2018

Вот мой код.

func numberOfSections(in tagsCV: UICollectionView) -> Int {
    return 1
}

func collectionView(_ tagsCV: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return videoObject?.tags?.count ?? 0
}

func collectionView(_ tagsCV: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize{
    let fontAttributes = [NSAttributedStringKey.font: StylesBook.hashtag.value.textFont]
    let size = (videoObject?.tags?[indexPath.row] ?? "" as String).size(withAttributes: fontAttributes)
    return CGSize(width: size.width + CGFloat(20) , height: 50)

}

func collectionView(_ tagsCV: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = tagsCV.dequeueReusableCell(withReuseIdentifier: "TagCollectionViewCell", for: indexPath) as! TagCollectionViewCell
    cell.tagBtn.setTitle(englishNumToPersian(text: videoObject?.tags?[indexPath.row] ?? "")  , for: .normal)
    cell.tagBtn.addTarget(self, action: #selector(tagTaped(sender:)), for: .touchDown)
    cell.transform = CGAffineTransform(scaleX: -1, y: 1)
    return cell
}

Ключ в том, что вам нужно установить направление прокрутки в представлении коллекции horizontal.Таким образом, независимо от того, есть ли у вас тег 1 или 1000, все они будут отлично отображаться, а ширина кнопки (или метки) будет соответствовать ее содержанию.Я рекомендую вам использовать кнопку вместо метки и отключить ее взаимодействие с пользователем, чтобы она действовала как метка.

0 голосов
/ 22 октября 2018

если у вас есть коллекция тегов, вам нужно реализовать представление коллекции в ячейке tableView, и если у вас есть только один тег, просто внедрите его в xib?

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