как избежать точек рядом с полем uitextfield

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


person thndrkiss    schedule 20.07.2010    source источник


Ответы (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 иметь динамическую высоту

person Akusete    schedule 20.07.2010
comment
Вопрос касается UITextField - для UITextField нет setLineBreakMode - person Ben Robinson; 01.02.2012
comment
Как сказал Бен, это бесполезно с UITextField. - person Legoless; 20.11.2013

Это возможно, если вы сделаете клавиатуру видимой, вызвав следующий код

[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];
person DareDevil    schedule 26.08.2013

Очень старый вопрос, но мне нужен был ответ, так как я пытался сделать очень тесную приборную панель, поэтому размер текста должен был быть очень оптимизирован, а последние несколько версий iOS делают текст излишне маленьким с помощью adjustsFontSizeToFitWidth = YES (не уверен, какая версия изменилась это, iOS 9 получает текст, чтобы соответствовать краям, iOS 13 оставляет много места). Очевидно, что lineBreakMode бесполезен. В итоге я добавил несколько дополнительных пикселей к ширине текстового прямоугольника:

- (CGRect)textRectForBounds:(CGRect)bounds {
    return CGRectInset(bounds, -4, 0);
}

Вышеупомянутое даст дополнительные 4 пикселя с каждой стороны для перерисовки, потому что в моем случае у меня был центрированный текст, который иногда мог не точно соответствовать горизонтали - отрегулируйте возвращенный прямоугольник для ваших нужд. Но в целом таким образом вы можете сохранить adjustsFontSizeToFitWidth = NO и выбрать размер шрифта, опасно близкий к вашему пределу, не получая при этом этих ужасных точек. Будет ли ваш перерасход отключен и т. д., зависит от вас.

person Ecuador    schedule 05.09.2020

Я пробовал много способов и, наконец, пришел к следующему решению.

UITextField не имеет свойства lineBreakMode, поэтому просто переопределите следующий метод в UITextField:

-(CGRect)textRectForBounds:(CGRect)bounds{

    CGRect rect = bounds;
    rect.size.width = rect.size.width;
    return rect;
}

Примечание: я не знаю как, но это работает.

person jnix    schedule 26.11.2013