2015-11-10 4 views
0

У меня есть UIButton, который я создал, как это:Tap область смешного мал для UIButton

let closeButton = UIButton(type: .System) 
closeButton.backgroundColor = UIColor(r: 92, g: 92, b: 118, alpha: 1) 
closeButton.setImage(UIImage(named: "closeCross")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate), forState: .Normal) 
closeButton.tintColor = UIColor.whiteColor() 
closeButton.imageEdgeInsets = UIEdgeInsets(top: -10, left: -10, bottom: -10, right: -10) 

closeButton.addTarget(self, action: "close", forControlEvents: .TouchUpInside) 
closeButton.frame = CGRectMake(messageView.frame.maxX - 30, 0, 20, 20) 
closeButton.center.y = messageView.bounds.midY 

Проблема заключается в том, что кран срабатывает только если вы пиксель от центра UIButton. Изображение, которое я установил, представляет собой png, который является крестиком X.

Даже если я коснусь креста (но не точно посередине, благодаря симулятору точность), он не работает.

Я не понимаю. Фон не ясен. Независимо от того, изменяю ли я вставку содержимого/изображения, ничего не меняет. Независимо от того, использую ли я режим рендеринга изображений, это не изменяет ничего.

+0

Вы пытались установить рамку для кнопки вручную? Или изменить тип кнопки? – Miroslav

+0

Что закрытьButton.frame распечатать? –

+0

Только что обновил сообщение с фреймом – Nico

ответ

2

Вот на самом деле, как я установил его:

closeButton.imageEdgeInsets = UIEdgeInsets(top: 15, left: 15, bottom: 15, right: 15) 
closeButton.frame = CGRectMake(noConnectionMessageView.frame.maxX - 40, 0, 40, 40) 
+1

избил меня. Отрицательные вставки означали, что изображение действительно выглядело больше, чем целевая область. – Tim

4

Его лучше всего держать UIbuttons по крайней мере 44x44 в размере. https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/LayoutandAppearance.html

Помогите людям взаимодействовать с контентом и элементами управления, предоставляя каждому интерактивному элементу достаточное расстояние. Дайте контролируемым элементам управления цель поражения около 44 х 44 точек.

Таким образом, я бы установил, чтобы ваша рама была больше, чем 20pts, а также размер вашего изображения 20pts? Нельзя ли это обрезать за пределами кнопки, убедитесь, что для параметра clipToBounds установлено значение yes.

Там также более радикальный подход, и это создать подкласс UIButton с сенсорным площадью не менее 44

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    CGFloat widthDelta = 44.0 - self.bounds.size.width; 
    CGFloat heightDelta = 44.0 - self.bounds.size.width; 
    CGRect largerBounds = CGRectInset(self.bounds, -0.5 * widthDelta, -0.5 * heightDelta); 
    return CGRectContainsPoint(largerBounds, point); 
} 

Другое дело сделать, это исследовать кнопку с помощью выявления (http://revealapp.com/)

+1

Вам не нужно раскрывать, его включить в новые версии XCode. Попробуйте кнопку прямо, кроме панели отладчика: http://imgur.com/0KVy8nR –

+1

Примерно через Xcode 12 они, возможно, закончили эту функцию! = P Я считаю, что это не так удобно, как раскрытие, но это мое личное мнение. Стоит также отметить, что вы должны заплатить за раскрытие. – BooRanger

0

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

Просто добавьте пробел в качестве текста заголовка. Целая область вашей кнопки начнет отвечать.

Это чудесно сработало для меня.

Смежные вопросы