Обрезанный заголовок UIButton

Я использую собственный шрифт для заголовка UIButton. Это работает, за исключением того, что в этом конкретном шрифте часть первого символа обрезается. Например:

введите здесь описание изображения

Я попытался установить contentEdgeInsets и titleEdgeInsets и не могу сделать так, чтобы они не обрезались. Я также попытался установить для свойства button.titleLabel.clipsToBounds значение NO;

Любые предложения будут ценны.


person Jeshua Lacock    schedule 17.04.2012    source источник


Ответы (4)


Хотя решение Иешуа работает нормально, на мой взгляд, оно не является оптимальным. Я бы предпочел создать подкласс UIButton и перезаписать его методом layoutSubviews.

-(void)layoutSubviews
{
    [super layoutSubviews];

    CGRect frame = self.titleLabel.frame;
    frame.size.height = self.bounds.size.height;
    frame.origin.y = self.titleEdgeInsets.top;
    self.titleLabel.frame = frame;
}
person samsam    schedule 24.02.2014
comment
Это действительно легко сделать, просто создайте класс (подкласс UIButton), скопируйте вставку, назначьте пользовательский класс кнопки. Спасибо! - person Graham P Heath; 19.11.2014
comment
Это должен быть принятый ответ. Простой и элегантный. - person Kiran Thapa; 05.05.2015
comment
Добавлен быстрый ответ 3.0 для вышеуказанного решения. - person Dhiraj Das; 08.03.2017
comment
По какой-то причине кажется, что это также устраняет отсечение в нижней части метки (т. е. нисходящие элементы, видимые в глифах, таких как y или g) при использовании пользовательского шрифта ( в моем случае Хирагино). - person Nicolas Miari; 28.03.2019

Поэтому я просто установил заголовок UIButton на nil и добавил свой собственный UILabel в качестве подпредставления к UIButton. Я устанавливаю рамку UILabel того же размера, что и кнопка, и устанавливаю ее по центру.

Я уверен, что это не самое элегантное решение, но оно выполняет свою работу.

person Jeshua Lacock    schedule 18.04.2012
comment
Это действительно отстой, что это единственное решение. Причина, по которой это происходит, заключается в том, что дизайнеры шрифтов намеренно кодируют границы своих букв как меньшие, чем они есть на самом деле, чтобы они вкладывались друг в друга. Это особенно важно для курсивных и курсивных шрифтов. Я бы хотел, чтобы Apple не была так точна с расчетом ширины метки UIButton или, по крайней мере, позволила бы нам изменить ее самостоятельно. Я подаю отчет об ошибке, вы тоже должны. - person Bek; 07.03.2013

Мне кажется, что ваш контент выровнен в стиле фанки. Если рамка этикетки недоступна напрямую, используйте [button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];, чтобы попытаться исправить проблему горизонтального выравнивания.

person CodaFi    schedule 17.04.2012
comment
На самом деле он установлен по центру как есть. Если я установлю правильное выравнивание, он останется обрезанным. - person Jeshua Lacock; 18.04.2012

Быстрый код для ответа выше:

override func layoutSubviews() {
    super.layoutSubviews()
    titleLabel?.frame = CGRect(x: bounds.origin.x, y: titleEdgeInsets.top, width: frame.width, height: bounds.size.height)
}
person Dhiraj Das    schedule 08.03.2017