Подтвердить что ты не робот

Предоставление поля текста/дополнения к UiButton на Iphone

У меня есть следующий макет, и я пытаюсь добавить отступы влево и вправо.

элементы управления - некоторые отключенные Uibutton. enter image description here

Мой код для создания кнопки:

        UIButton *buttonTime = [[UIButton alloc] initWithFrame:CGRectMake(90, 10, 50, 20)]; 
        [buttonTime setBackgroundImage:[[UIImage imageNamed:@"bubble.png"] stretchableImageWithLeftCapWidth:9 topCapHeight:13] forState:UIControlStateDisabled];

        [buttonTime setTitle:@"27 feb, 2011 11:10 PM" forState:UIControlStateDisabled];             
        [buttonTime setTitleColor:[UIColor blackColor] forState:UIControlStateDisabled];
        buttonTime.titleLabel.font=[UIFont fontWithName:@"Helvetica" size:8.0]; 
        buttonTime.titleLabel.lineBreakMode= UILineBreakModeWordWrap;
        [buttonTime setEnabled:FALSE];
        [scrollView addSubview:buttonTime];
        [buttonTime release];
4b9b3361

Ответ 1

@property(nonatomic) UIEdgeInsets titleEdgeInsets;

Используйте это свойство для изменения размера и изменения правильного прямоугольника чертежа для названия кнопки. Вы можете указать другое значение для каждой из четырех вложений (верхний, левый, нижний, правый). Положительное значение сжимается, или вставки, которые пересекают его ближе к центру кнопки. Отрицательное значение расширяет или завершает этот край. Используйте функцию UIEdgeInsetsMake для создания значения для этого свойства. Значение по умолчанию - UIEdgeInsetsZero.

Ответ 2

Ответ Toro является совершенным. Вы также можете установить значения вставки из Инспектора размеров внутри раскадровки или xib.

enter image description here

Ответ 3

Проблема с принятым ответом заключается в том, что установка titleEdgeInsets является ограничением, как указано в документации Apple:

Это свойство используется только для позиционирования заголовка во время макета. Кнопкa > не использует это свойство для определения intrinsicContentSize и > sizeThatFits (_:).

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

Альтернативный подход, учитывающий длину заголовка переменной, должен оставить значение titleEdgeInsets в качестве значения по умолчанию. После того как заголовок кнопки установлен, добавьте явные ограничения ширины и высоты, которые соответствуют ярлыку названия кнопки и дополнительным полям. Например:

let margin: CGFloat = 10.0

let button = UIButton()

button.setTitle("My Button Title", for .normal)

button.widthAnchor.constraint(equalToConstant: button.titleLabel!.intrinsicContentSize.width + margin * 2.0).isActive = true

button.heightAnchor.constraint(equalToConstant: button.titleLabel!.intrinsicContentSize.height + margin * 2.0).isActive = true

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

Ответ 5

Подобно @bugloaf, упомянутому в комментарии, установка вложений содержимого будет препятствовать сокращению/сокращению заголовка UIButton

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

Ответ 6

Эта опция также жизнеспособна, если ее не слишком раздражает использование подкласса UIButton

class Button: UIButton {
    override var intrinsicContentSize: CGSize {
        get {
            let baseSize = super.intrinsicContentSize
            return CGSize(width: baseSize.width + titleEdgeInsets.left + titleEdgeInsets.right,
                          height: baseSize.height + titleEdgeInsets.top + titleEdgeInsets.bottom)
        }
    }
}

Затем используйте titleEdgeInsets по желанию

 let button = Button()
 ... configure button
 button.titleEdgeInsets = ...

Ответ 7

Я нашел простой/хакерский способ добавления границ в текстовые кнопки (и поля слева/справа):

  • Создайте кнопку с заголовком.

  • Поместите кнопку в раскадровку, выровняйте туда, где хотите, а затем добавьте принудительное ограничение ширины, которое является четным числом (я использовал 20, поэтому он добавляет 10 очков с каждой стороны). Это заставит границу шириной, которую вы создали.

  • Используйте код для создания границы. например:

    myTextButton.backgroundColor = .clear
    myTextButton.layer.cornerRadius = 5
    myTextButton.layer.borderWidth = 2
    myTextButton.layer.borderColor = UIColor.white.cgColor
    
  • Задайте левый заголовокИзменить на 2 через редактор (теперь в разделе "Инспектор размеров" ) или по коду. Это, кажется, центрирует текст, но это значение может отличаться для разных текстов и размеров текста.

Это сообщение для XCode 8.1 и Swift 3.