UIViewの境界線のプロパティ(色、太さなど)をInterface Builderから直接制御することは可能ですか、それともプログラムでしか実行できませんか?
9 に答える
実際には、インターフェイス ビルダーを介してビューのレイヤーのいくつかのプロパティを設定できます。xcode を使用してレイヤーの borderWidth と cornerRadius を設定できることを知っています。おそらくレイヤーが UIColor ではなく CGColor を必要とするため、borderColor は機能しません。
数値の代わりに文字列を使用する必要があるかもしれませんが、うまくいきます!
layer.cornerRadius
layer.borderWidth
layer.borderColor
更新: layer.masksToBounds = true
iHulkのものと同様の答えですが、Swiftで
プロジェクトに UIView.swift という名前のファイルを追加します (または、これを任意のファイルに貼り付けます)。
import UIKit
@IBDesignable extension UIView {
@IBInspectable var borderColor: UIColor? {
set {
layer.borderColor = newValue?.cgColor
}
get {
guard let color = layer.borderColor else {
return nil
}
return UIColor(cgColor: color)
}
}
@IBInspectable var borderWidth: CGFloat {
set {
layer.borderWidth = newValue
}
get {
return layer.borderWidth
}
}
@IBInspectable var cornerRadius: CGFloat {
set {
layer.cornerRadius = newValue
clipsToBounds = newValue > 0
}
get {
return layer.cornerRadius
}
}
}
次に、これは、Utilities Panel > Attributes Inspector のすべてのボタン、imageView、ラベルなどの Interface Builder で使用できるようになります。
注: 境界線は実行時にのみ表示されます。
UIView のカテゴリを作成し、これをカテゴリの .h ファイルに追加できます
@property (nonatomic) IBInspectable UIColor *borderColor;
@property (nonatomic) IBInspectable CGFloat borderWidth;
@property (nonatomic) IBInspectable CGFloat cornerRadius;
これを.mファイルに追加します
@dynamic borderColor,borderWidth,cornerRadius;
これも . mファイル
-(void)setBorderColor:(UIColor *)borderColor{
[self.layer setBorderColor:borderColor.CGColor];
}
-(void)setBorderWidth:(CGFloat)borderWidth{
[self.layer setBorderWidth:borderWidth];
}
-(void)setCornerRadius:(CGFloat)cornerRadius{
[self.layer setCornerRadius:cornerRadius];
}
これで、すべての UIView サブクラス (UILabel、UITextField、UIImageView など) のストーリーボードに表示されます。
それだけです.. カテゴリをどこにでもインポートする必要はありません。カテゴリのファイルをプロジェクトに追加するだけで、ストーリーボードでこれらのプロパティを確認できます。
これによりプロパティが設定される可能性がありますが、実際には IB には反映されません。したがって、本質的に IB でコードを書いている場合は、ソース コードでそれを行うこともできます。
次の 2 行の簡単なコードを追加してください。
self.YourViewName.layer.cornerRadius = 15
self.YourViewName.layer.masksToBounds = true
それはうまくいきます。