UITextView textContainerInset не соответствует значению нижнего вставки

У меня есть UIView, отображающий NSAttributedString. Он настроен на изменение размера, чтобы соответствовать его содержимому.

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

view.textContainerInset = UIEdgeInsetsMake(0, 15, 0, 15);

... тогда левое и правое края дополняются, а верх и низ не имеют места. Это верно. Затем я добавляю верхнюю вставку:

view.textContainerInset = UIEdgeInsetsMake(15, 15, 0, 15);

Теперь верх имеет наложение 15 пунктов, но внезапно нижняя часть слегка подбита (примерно на 10 пунктов).

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

view.textContainerInset = UIEdgeInsetsMake(15, 15, 5, 15);

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

Ответ 1

Я не уверен, что дает, но у меня такая же проблема, похоже, ошибка в части Apple. Я тестирую iOS7.1.

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

view.textContainerInset=UIEdgeInsetsMake(100, 0, 100, 0);

Как говорится в первоначальном вопросе, нижняя вставка 100, по-видимому, игнорируется. Я наткнулся на то, что я могу это сделать:

view.textContainerInset=UIEdgeInsetsMake(100, 1, 100, 0);

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

Ответ 2

Все еще присутствует в iOS 8.4 (Simulator).

Если Inset left и right равны 0, нижняя часть не соблюдается.

Это соблюдается, если любое свойство слева или справа не равно 0:

_title.textContainerInset = UIEdgeInsetsMake( dy, 0, dy, 0.001);