Возможно ли удалить точки, которые отображаются рядом с полем uitext, когда текст больше, чем ширина поля uitext.
как избежать точек рядом с полем uitextfield
Ответы (4)
Существует свойство lineBreakMode, которое определяет поведение, когда отображаемый текст больше, чем поле элемента управления.
//UILineBreakMode
//Options for wrapping and truncating text.
typedef enum {
UILineBreakModeWordWrap = 0,
UILineBreakModeCharacterWrap,
UILineBreakModeClip,
UILineBreakModeHeadTruncation,
UILineBreakModeTailTruncation,
UILineBreakModeMiddleTruncation,
} UILineBreakMode;
Если вам не нужны точки, вы можете использовать UILineBreakModeClip, который просто обрезает текст в конце. Apple doc говорит следующее:
Обрежьте текст, когда будет достигнут конец прямоугольника рисования. Эта опция может привести к частично отображаемому символу в конце строки. Доступно в iPhone OS 2.0 и более поздних версиях.
Хотя это, конечно, зависит от того, как вы хотите отображать текст. Поскольку в любом случае вы не можете отобразить весь текст, точки обычно более эстетичны, чем необработанный разрыв.
Если вам требуется, чтобы был виден абсолютно весь текст, вы должны либо увеличить ширину поля, либо высоту (и использовать UILineBreakModeCharacterWrap) , или, возможно, уменьшить размер шрифта (в крайнем случае).
Быстрый поиск в Google по этой теме выдал это Как заставить UILabel/UITableViewCell иметь динамическую высоту
Это возможно, если вы сделаете клавиатуру видимой, вызвав следующий код
[self.yourTextField стал первым ответчиком];
Затем больший текст обрезается слева.
вы также можете скрыть клавиатуру [если вы используете любую пользовательскую клавиатуру], используя следующий код
// Hide keyboard for Dial Pad, but show blinking cursor
UIView *dummyKeyboardView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
yourTextField.inputView = dummyKeyboardView;
[dummyKeyboardView release];
Очень старый вопрос, но мне нужен был ответ, так как я пытался сделать очень тесную приборную панель, поэтому размер текста должен был быть очень оптимизирован, а последние несколько версий iOS делают текст излишне маленьким с помощью adjustsFontSizeToFitWidth = YES
(не уверен, какая версия изменилась это, iOS 9 получает текст, чтобы соответствовать краям, iOS 13 оставляет много места). Очевидно, что lineBreakMode
бесполезен. В итоге я добавил несколько дополнительных пикселей к ширине текстового прямоугольника:
- (CGRect)textRectForBounds:(CGRect)bounds {
return CGRectInset(bounds, -4, 0);
}
Вышеупомянутое даст дополнительные 4 пикселя с каждой стороны для перерисовки, потому что в моем случае у меня был центрированный текст, который иногда мог не точно соответствовать горизонтали - отрегулируйте возвращенный прямоугольник для ваших нужд. Но в целом таким образом вы можете сохранить adjustsFontSizeToFitWidth = NO
и выбрать размер шрифта, опасно близкий к вашему пределу, не получая при этом этих ужасных точек. Будет ли ваш перерасход отключен и т. д., зависит от вас.
Я пробовал много способов и, наконец, пришел к следующему решению.
UITextField
не имеет свойства lineBreakMode
, поэтому просто переопределите следующий метод в UITextField
:
-(CGRect)textRectForBounds:(CGRect)bounds{
CGRect rect = bounds;
rect.size.width = rect.size.width;
return rect;
}
Примечание: я не знаю как, но это работает.