2016-03-30 12 views
1

36x36 olan bir UIButton'um var ve doldurma alanını the recommended 44x44 olacak şekilde doldurmaya (CSS gibi özü) eklemek istiyorum.Metin içermeyen bir UIButton'a dolgu ekleme

Arayüz Oluşturucu üzerinden ve aşağıdaki kodla birlikte kenar eklemeleri eklemeyi denedim, ancak denediğim hiçbir şey dokunulmaz alanı artırıyor.

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

Kenar eki yalnızca metin içeren düğmelerle çalışır mı?

Güncelleme: Ben contentEdgeInsets, imageEdgeInsets ve titleEdgeInsets boşuna ayarlama denedim

  • .

  • Gerçek görüntüyü düzenleyerek ve simge çevresindeki kenarlığı artırarak, dokunulabilir alanı genişletebilirim. (. Bu tercih edilen bir yol olmaz ama başka bir çözüm bulamazsam ben muhtemelen bu rotayı gidersiniz)

+0

Kontrol objektif için var bu http://stackoverflow.com/questions/808503/uibutton-making-the-hit-area-larger-than-the-default-hit-area – schmidt9

+0

-c. Swift kullanıyorum. –

cevap

1

Ben Swift içinde this cevap overwrote ve çalışır:

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) 
    } 

} 

Kullanım:

var insets: UIEdgeInsets = UIEdgeInsetsMake(-20, -20, -20, -20) 
button.setHitTestEdgeInsets(&insets)