2016-03-30 10 views
1

私は36x36のUIButtonを持っていますが、タッチ可能な領域がthe recommended 44x44になるようにパディング(本質的にCSSのように)を追加したいと思います。テキストがないUIButtonにパディングを追加する

私はインターフェイスビルダと下のコードでエッジインサートを追加しようとしましたが、試したことがないものはタッチ可能な領域を増やしました。

resetButton.contentEdgeInsets.top = 50 
resetButton.contentEdgeInsets.left = 50 

エッジインセットは、テキストを含むボタンでのみ機能しますか?

更新:

  • 私は無駄にcontentEdgeInsetsimageEdgeInsets、およびtitleEdgeInsetsを設定しようとしました。

  • 私は実際の画像を編集し、アイコンの周りの境界線を増やすことでタッチ可能な領域を拡張することができました。 (これは好ましい方法ではないでしょうが、私は別の解決策を見つけることができない場合、私はおそらく、このルートを行くよ)

+0

チェック目的のためだ、このhttp://stackoverflow.com/questions/808503/uibutton-making-the-hit-area-larger-than-the-default-hit-area – schmidt9

+0

-c。私はスイフトを使用しています。 –

答えて

1

私はスウィフトthisの回答で上書きし、それが動作します:

import UIKit 
import ObjectiveC 

private var KEY_HIT_TEST_EDGE_INSETS: String = "HitTestEdgeInsets" 

extension UIButton { 

    public func setHitTestEdgeInsets(inout hitTestEdgeInsets: UIEdgeInsets) { 
     let value = NSValue(&hitTestEdgeInsets, withObjCType:NSValue(UIEdgeInsets: UIEdgeInsetsZero).objCType) 
     objc_setAssociatedObject(self, &KEY_HIT_TEST_EDGE_INSETS, value, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) 
    } 

    private func hitTestEdgeInsets() -> UIEdgeInsets { 
     let value = objc_getAssociatedObject(self, &KEY_HIT_TEST_EDGE_INSETS) 
     if (value != nil) { 
      var edgeInsets: UIEdgeInsets = UIEdgeInsetsZero 
      value.getValue(&edgeInsets) 
      return edgeInsets 
     } else { 
      return UIEdgeInsetsZero 
     } 
    } 

    override public func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool { 

     if UIEdgeInsetsEqualToEdgeInsets(self.hitTestEdgeInsets(), UIEdgeInsetsZero) || !self.enabled || self.hidden { 
      return super.pointInside(point, withEvent: event) 
     } 

     let relativeFrame = self.bounds 
     let hitFrame = UIEdgeInsetsInsetRect(relativeFrame, self.hitTestEdgeInsets()); 

     return CGRectContainsPoint(hitFrame, point) 
    } 

} 

用途:

var insets: UIEdgeInsets = UIEdgeInsetsMake(-20, -20, -20, -20) 
button.setHitTestEdgeInsets(&insets) 
関連する問題