UITextView и загадочное недостающее пространство

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

Например:

Я пытаюсь понять, что здесь происходит, я начал вводить свою обычную строку отладки, я набрал «Что», нажал клавишу пробела, и пробел не появился (но это обычно). Я набрал «the», и это выглядело так, как будто оно было прикреплено прямо к концу предыдущего слова. Конечно, места не было. Я мог бы вернуться и просто добавить пробел, и как только я добавлю пробел, я могу добавить другие пробелы, поскольку перенос слов становится эффективным.

Еще одно загадочное поведение заключается в том, что когда вы дважды нажимаете пробел, точка в конце не добавляется. Он заменяет последний символ точкой. Итак, «Что» + пробел + пробел становится «Что».

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

Например, если я наберу «Что» + пробел + «то», получится «Что» с «Что» в первой строке и «то» во второй (хотя я могу видеть только вершины «то». Кроме того, вот некоторая информация журнала из файла textViewDidChange:.

Character    textView.text.length
---------    --------------------
W            1
h            2
a            3
t            4
<space>      4
t            5
h            6
<space>      7    <----  Here's a wierd one . . . now spaces all
?            8           work fine unless it's resizing

person D. Patrick    schedule 06.02.2013    source источник
comment
Вы подняли его в Apple Bug Reporter?   -  person iDev    schedule 06.02.2013
comment
Чем больше я смотрел на это, тем больше я чувствовал, что тестировал довольно тщательно, и, таким образом, тем более разумным было то, что это ошибка. Я попробовал использовать меньший шрифт и более длинное слово и получил те же результаты. Я отправил отчет об ошибке. Тем временем я использую меньший шрифт, надеясь снизить вероятность того, что мои пользователи столкнутся с такой ситуацией (т. е., возможно, они не будут начинать с длинных слов), чтобы я мог выпустить релиз, но я не чувствую себя прекрасно об этом, поскольку проблема все еще существует.   -  person D. Patrick    schedule 06.02.2013
comment
У Jst была эта проблема :(   -  person Nico Prananta    schedule 16.02.2013
comment
Я подал отчет об ошибке, и они попросили меня опубликовать пример приложения. Я сделал, и я дам вам, ребята, знать, что из этого получится.   -  person D. Patrick    schedule 17.02.2013
comment
Я подтвердил, что эта ошибка, скорее всего, будет исправлена ​​в ближайшие несколько месяцев.   -  person D. Patrick    schedule 02.07.2013
comment
Похоже, это было исправлено в iOS 7.   -  person Mike    schedule 28.12.2013
comment
У меня была такая же проблема в ios 7. но не мог определить причину. Это может быть ошибка.   -  person Rinku    schedule 06.03.2014


Ответы (1)


Еще одно загадочное поведение заключается в том, что когда вы дважды нажимаете пробел, точка в конце не добавляется. Он заменяет последний символ точкой. Итак, «Что» + пробел + пробел становится «Что».

Это не таинственно. Это означает, что ваш UITextView использует автоисправление. Исправить:

UITextView *txtView; // your UITextView
[txtView setAutocorrectionType:UITextAutocorrectionTypeNo];

О пробелах... поскольку пробел не является символом, который можно рисовать, ваш UITextView не может измерить его размер (ширина различается в зависимости от выравнивания), поэтому свойство contentSize вашего UITextView не будет изменено и ведет себя загадочно. Вы должны установить contentSize вручную (вы можете легко рассчитать размер вашего NSString методом sizeWithFont:).

person Dennis Pashkov    schedule 28.04.2013
comment
Что ж, автоматическое добавление периода является желаемым поведением. Обычно, когда эта точка добавляется, она добавляется в конец строки, а не заменяет последний символ. Когда я сделал демонстрационное приложение, я сделал это без изменения размера. Когда одно слово достигает края текстовой области (даже без динамического изменения размера), нежелательное поведение сохраняется. - person D. Patrick; 29.04.2013