2016-06-22 23 views
5

Tôi đang tạo lớp tùy chỉnh cho UIButton để tăng diện tích nhấn. Tôi cần người dùng đó có thể nhập phần đệm vào bảng phân cảnh. Vì vậy, tôi tạo một thuộc tính IBInspectable.IBIEspectable UIEdgeInsets không được hiển thị trong IBOutlet

@IBDesignable class UIIconButton: UIButton { 
    @IBInspectable var touchPadding:UIEdgeInsets = UIEdgeInsetsZero 
} 

Nhưng nó không được hiển thị trong bảng phân cảnh. Tuy nhiên, nếu thay thế bằng CGRect thì nó sẽ hiển thị trong bảng phân cảnh.

Trả lời

15

Kể từ Xcode 7, Trình tạo giao diện không hiểu được UIEdgeInsetsZero dưới dạng @IBInspectable (bummer!).

Bạn có thể làm việc xung quanh này, tuy nhiên, bằng cách sử dụng CGFloat tính để thiết lập insets cạnh gián tiếp:

public class UIIconButton: UIButton { 

    @IBInspectable public var bottomInset: CGFloat { 
    get { return touchPadding.bottom } 
    set { touchPadding.bottom = newValue } 
    } 
    @IBInspectable public var leftInset: CGFloat { 
    get { return touchPadding.left } 
    set { touchPadding.left = newValue } 
    } 
    @IBInspectable public var rightInset: CGFloat { 
    get { return touchPadding.right } 
    set { touchPadding.right = newValue } 
    } 
    @IBInspectable public var topInset: CGFloat { 
    get { return touchPadding.top } 
    set { touchPadding.top = newValue } 
    } 

    public var touchPadding = UIEdgeInsetsZero  
} 

này một cách chính xác sẽ hiển thị các bottomInset, leftInset, vv trong giao diện người xây dựng.

+0

Đã cho tôi một vài giờ để đến giải pháp này. – Urban

Các vấn đề liên quan