Как добавить UITextView в нижнюю часть UITableView - PullRequest
0 голосов
/ 19 марта 2019

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

В настоящее время я настроил этот экран с UIViewController, содержащим UITableViewэто прикреплено к верхнему, нижнему, ведущему и конечному якору представления, используя AutoLayout для средней секции.Это прекрасно работает.Затем я добавил tableHeaderView, который содержит информацию о пользователе сверху.Теперь я только что добавил секунду UITableView в tableFooterView, и, что удивительно, это тоже работает как шарм.У меня были небольшие проблемы с высотой, но мне удалось это сделать методом viewDidLayoutSubviews().Но это немного не по теме.

Сейчас я на последней стадии, когда я хочу добавить UITextView вместе с UIButton (в контейнере UIView), чтобы пользователи могли добавлять комментарии.Сначала я добавил это в tableFooterView, и это сработало, но как только содержимое стало слишком коротким (например, только одна строка в середине и комментариев пока нет), UITextView появится в середине экрана(прямо под содержанием UITableView).Я прочитал об этом и понял, что это ожидаемое поведение tableFooterView, поэтому сейчас я пытаюсь выяснить, как добавить это настраиваемое представление, чтобы добавлять комментарии, которые всегда будут навнизу, если содержимое не заполняет весь экран, но также прокручивает содержимое, если содержимое превышает размер экрана.(В идеале я хотел бы иметь возможность увеличивать или уменьшать UITextView, когда пользователь вводит текст - может быть уместно, если кто-то предлагает contentInsets).

Есть предложения?Должен ли я добавить подпредставление непосредственно к UITableView (что, насколько я понимаю, не рекомендуется)?Должен ли я работать с contentInsets в UITableView и добавить контейнер UIView в качестве подпредставления моего основного UIViewController?Я немного растерялся после поиска нескольких решений, но не нашел правильного, поэтому надеюсь, что вы, ребята, сможете мне помочь.Ура!

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Вы должны добавить отдельный UIView внизу основного экрана и добавить UITextView в качестве подпредставления в нем.Добавьте TableView над этим видом контейнера, чтобы он прокручивался, а текстовое представление всегда было видно внизу.

0 голосов
/ 19 марта 2019

Добавление UITextView сложно, потому что это подкласс UIScrollView, как и UITableView, и добавление представления прокрутки к другому представлению прокрутки не только трудно для распознавателей жестов, но и для автоматического макета .

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

Что мне нравится делать для этого, так это объявить enum в моем контроллере вида:

class MyViewController: UIViewController {
    private enum Section: Int, CaseIterable {
        case foo
        case bar
    }
}

extension MyViewController: UITableViewDataSource {
    func numberOfSections(in tableView: UITableView) -> Int {
        return Section.allCases.count
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        guard let section = Section(rawValue: section) else { preconditionFailure() }

        switch section {
        case .foo:
            return 1
        case .bar:
            return 4
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let section = Section(rawValue: indexPath.section) else { preconditionFailure() }

        let cell: UITableViewCell
        switch section {
        case .foo:
            cell = ...
        case .bar:
            cell = ...

        return cell
    }
}

Для ячеек с длинным текстом вы можете просто использовать стиль ячейки default (в вашей XIB / раскадровке) и установить

cell.textLabel?.numberOfLines = 0

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

Единственная причина, по которой вам нужно использовать UITextView в вашем сценарии, заключается в том, что вы хотите, чтобы пользователь мог редактировать текст. В противном случае избавьте себя от боли и используйте UILabel.

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