Как увеличить площадь области для 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, который может решить вашу проблему за счет дополнительной работы. Но, честно говоря, добавление дополнительного прозрачного фона вокруг изображения - лучшее решение.
Ответ 5
Вы можете добавить файл категории UIButton (extention)
в свой проект, который может помочь вам making-the-hit-area-larger-than-the-default-hit-area