Установка высоты заголовка tableView в Swift

Возможно, используя инструмент командной строки:

OpenedFilesView v1.50 - просмотр открытых / заблокированных файлов в вашей системе (проблемы с нарушениями доступа)

http: // www. nirsoft.net/utils/opened_files_view.html

21
задан idelara 28 July 2015 в 01:21
поделиться

4 ответа

Если вы хотите использовать для UITableView заголовок, вместо этого вы можете создать другую ячейку прототипа в Интерфейсном Разработчике, создать собственный класс на основе UITableViewCell и назначить его ячейке прототипа в конструкторе интерфейсов в Инспекторе классов.

Тогда в вашем контроллере вы будете использовать

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

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

return cell.contentView

Еще один метод, который вы собираетесь использовать, -

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 61.0
}

Этот человек говорит сам за себя.

Swift 3.0.1

public override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 61.0
}
52
ответ дан Nicholas Ng 28 July 2015 в 01:21
поделиться

Swift 3 / Xcode 8:

Добавьте это в viewDidLoad():

let HEADER_HEIGHT = 100
tableView.tableHeaderView?.frame.size = CGSize(width: tableView.frame.width, height: CGFloat(HEADER_HEIGHT))

Наслаждайтесь!

17
ответ дан Nick Ivanov 28 July 2015 в 01:21
поделиться

В Swift 4.1 и Xcode 9.4.1

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
     if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.pad {
        return 75.0
      } else {
        return 50.0
      }
}
1
ответ дан iOS 28 July 2015 в 01:21
поделиться

Принятый ответ на самом деле не отвечает на вопрос. Вместо этого он предлагает альтернативу, используя заголовок SECTION. На этот вопрос ответили другие, но я продублирую ответ здесь с еще несколькими инструкциями.


Загрузка представления

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

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

lazy var profileHeaderView: ProfileHeaderView = {
    let headerView = ProfileHeaderView()
    return headerView
}()

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    sizeHeaderToFit()
}

private func sizeHeaderToFit() {
    profileHeaderView.setNeedsLayout()
    profileHeaderView.layoutIfNeeded()

    var frame = profileHeaderView.frame
    frame.size.height = profileHeaderView.calculateHeight()
    profileHeaderView.frame = frame

    tableView.tableHeaderView = profileHeaderView
}

Как видите, мне нравится помещать свои взгляды в ленивые переменные. Это гарантирует, что они всегда создаются, но только когда я начинаю их использовать.

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


Установите некоторые приоритеты

Мы, скорее всего, увидим некоторые предупреждения об ограничениях в нашем отладчике. Это происходит потому, что табличное представление сначала устанавливает размер 0x0, прежде чем использовать размер, который мы указали выше. В этот момент ваши ограничения и высота представления конфликтуют друг с другом.

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

Затем нам нужно установить высокие приоритеты нижнего ограничения:

containerView.setContentCompressionResistancePriority(.defaultHigh, for: .vertical)
containerView.setContentHuggingPriority(.defaultHigh, for: .vertical)

Вот более полный пример:

ПРЕДУПРЕЖДЕНИЕ Хотя это все еще полезно в качестве руководства для разметки ваших представлений, не используйте этот код, если вы создаете свои представления, используя перья или раскадровки.

class ProfileHeaderView: UIView {
    lazy var containerView: UIView = {
        let view = UIView()
        return view
    }()

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupLayout()
    }

    required init?(coder aDecoder: NSCoder) {
        // We do this because the view is not created using storyboards or nibs.
        fatalError("init(coder:) has not been implemented")
    }

    private func setupLayout() {
        self.addSubview(containerView)

        containerView.translatesAutoresizingMaskIntoConstraints = false
        containerView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
        containerView.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
        containerView.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
        containerView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
        containerView.setContentCompressionResistancePriority(.defaultHigh, for: .vertical)
        containerView.setContentHuggingPriority(.defaultHigh, for: .vertical)

        // Set the rest of your constraints against your containerView not self and add your subviews to your containerView not self
    }
}

Вот пример ограничений, установленных с помощью snap-kit:

containerView.snp.makeConstraints() { make in
    make.top.equalTo(self.snp.top)
    make.leading.equalTo(self.snp.leading)
    make.trailing.equalTo(self.snp.trailing)
    make.bottom.equalTo(self.snp.bottom).priority(.high)
}

Убедитесь, что вы добавили свои ограничения в containerView, а не self и используете containerView для добавления ваших подпредставлений. и остальные ваши ограничения.

0
ответ дан Kubee 28 July 2015 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: