Как управлять правым полем моего UITextView - PullRequest
0 голосов
/ 16 октября 2019

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

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

Во второй паре изображений правое поле является правильным (20) в верхней части, но больше, чем в других местах - в том же текстовом представлении!

enter image description here enter image description here

enter image description here enter image description here

У меня есть это в viewDidLoad

    tableView.rowHeight = UITableView.automaticDimension
    tableView.estimatedRowHeight = 600

и

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
    //        NSLog("Section %ld Row %ld", (long)[indexPath section], (long)[indexPath row]);
    return UITableView.automaticDimension
}

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

Если я перехожу на атомарный режим и просто начинаю заново строить представления, это часто решает проблему. Это нормальная часть отладочных представлений?

1 Ответ

1 голос
/ 28 октября 2019

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

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

Делайте это правильно: проектируйте и отображайте свой атрибутивный текст другим способом. Загрузите файл при запуске и заполните интерфейс в коде. Вы можете создать свой текст в HTML с помощью CSS и выложить его в WKWebView, или вы можете создать свой текст в RTF (или HTML) и загрузить его как NSAttributedString и поместить его в текстовое представление. Вы даже можете создать текст целиком в коде с нуля как NSMutableAttributedString! Но в любом случае вам нужно получить контроль над своим текстом, чтобы вы знали и контролировали, что это такое и каковы поля абзаца.

В некотором смысле это сбой базового MVC. Interface Builder - это создание вашего интерфейса : «текстовое представление идет сюда». Это вид . Что входит в текстовое представление модель : это ваши данные . Вы не можете создать данные в Интерфейсном Разработчике. Научитесь создавать и отображать атрибутивный текст или HTML в коде .

...