Установите границу для UIButton в раскадровке

Я не могу получить границу на своих кнопках в XCode 5, не устанавливая их непосредственно в коде. Возможно ли, что нет никакого способа сделать это на раскадровке без создания пользовательского фонового изображения?

Ответ 1

Вы можете использовать путь ключа.

Например, радиус угла (layer.cornerRadius), как описано на изображении. Вы не сможете увидеть эффекты на раскадровке, потому что эти параметры оцениваются во время выполнения. Теперь вы можете использовать быструю категорию в UIView (код ниже рисунка) с помощью @IBInspectable, чтобы показать результат в раскадровке (если вы используете категорию, используйте только cornerRadius, а не layer.cornerRadius в качестве ключевого пути.

enter image description here


extension UIView {
    @IBInspectable var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        }
    }
}

Ниже приведена категория из Peter DeWeese, которые позволяют использовать ключевой путь layer.borderUIColor для установки цвета рамки.

CALayer + XibConfiguration.h:

#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>

@interface CALayer(XibConfiguration)

// This assigns a CGColor to borderColor.
@property(nonatomic, assign) UIColor* borderUIColor;

@end

CALayer + XibConfiguration.m:

#import "CALayer+XibConfiguration.h"

@implementation CALayer(XibConfiguration)

-(void)setBorderUIColor:(UIColor*)color
{
    self.borderColor = color.CGColor;
}

-(UIColor*)borderUIColor
{
    return [UIColor colorWithCGColor:self.borderColor];
}

@end

Ответ 2

Swift 3 Если вы хотите увидеть результат в IB, когда используете IBInspectable, вам нужно расширить UIView и добавить свойства к этому классу, то есть

@IBDesignable class MyView: UIView {}

extension MyView {
    @IBInspectable var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        }
    }

    @IBInspectable var borderWidth: CGFloat {
        get {
            return layer.borderWidth
        }
        set {
            layer.borderWidth = newValue
            layer.masksToBounds = newValue > 0
        }
    }

    @IBInspectable var borderColor: UIColor {
        get {
            return UIColor.init(cgColor: layer.borderColor!)
        }
        set {
            layer.borderColor = newValue.cgColor
        }
    }
}

ссылка: http://nshipster.com/ibinspectable-ibdesignable/

Ответ 3

Короткий ответ:

layer.cornerRadius = 10
layer.borderWidth = 1
layer.borderColor = UIColor.blue.cgColor

Длинный ответ:

Закругленные углы UIButton

customUIView.layer.cornerRadius = 10

Толщина границы

pcustomUIView.layer.borderWidth = 1

Цвет границы

customUIView.layer.borderColor = UIColor.blue.cgColor

Ответ 4

Вы можете использовать фрагмент кода, например:

self.addButton.layer.borderColor = [[UIColor greenColor] CGColor];

Обратите внимание: addButton является IBOutlet.