Как увеличить площадь области для UIButton?

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

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

Помимо двух подходов выше, есть ли лучшее решение для увеличения области отвода UIButton?

Ответы

Ответ 1

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

button.contentEdgeInsets = UIEdgeInsets (вверху: 12, слева: 16, внизу: 12, справа: 16)

//или если вы специально хотите настроить изображение, вместо этого используйте button.imageEdgeInsets

В построителе интерфейса он будет выглядеть следующим образом:

interface builder

Ответ 2

Вы можете установить кнопку EdgeInsets в раскадровке или через код. Размер кнопки должен быть больше по высоте и ширине, чем изображение, установленное на кнопку. UIEdgeInseton UIButton

Или вы также можете использовать представление изображения с жестом нажатия на него для действия при записи на изображение. Обязательно установите флажок "Взаимодействие с пользователем" для просмотра изображений на раскадровке, чтобы он мог работать. Сделайте изображение более крупным, чем изображение, чтобы установить его и установить изображение на нем. Теперь установите режим изображения с изображением в центр на построителе раскадровки/интерфейса.

Использование изображения с эффектом нажатия и изображением, установленным на нем как центральным режимом Вы можете нажать на изображение, чтобы выполнить действие.

Надеюсь, это будет полезно.

Ответ 3

Очень легко. Создайте пользовательский класс UIButton. Затем переопределите метод pointInside... и измените значение, как вы хотите.

#import "CustomButton.h"

@implementation CustomButton

-(BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    CGRect newArea = CGRectMake(self.bounds.origin.x - 10, self.bounds.origin.y - 10, self.bounds.size.width + 20, self.bounds.size.height + 20);

    return CGRectContainsPoint(newArea, point);
}
@end

Для каждой стороны потребуется более 10 точек зоны касания.

Ответ 4

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