인터페이스 빌더에서 UIView 경계 속성을 설정할 수 있습니까?
인터페이스 빌더에서 UIView 테두리 속성(색상, 두께 등)을 직접 제어할 수 있습니까? 아니면 프로그래밍 방식으로만 제어할 수 있습니까?
실제로 인터페이스 작성기를 통해 뷰 도면층의 일부 속성을 설정할 수 있습니다.xcode를 통해 레이어의 borderWidth와 cornerRadius를 설정할 수 있다는 것을 알고 있습니다.계층에서 UIColor 대신 CGColor를 원하기 때문에 borderColor가 작동하지 않습니다.
숫자 대신 문자열을 사용해야 할 수도 있지만, 효과가 있습니다!
layer.cornerRadius
layer.borderWidth
layer.borderColor
업데이트: layer.masksToBounds = true
Rich86Man의 대답은 맞지만, 카테고리를 사용하여 layer.borderColor와 같은 속성을 프록시할 수 있습니다. (CocoaPod에서)
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
layer.borderUIColor
결과는 Xcode가 아닌 런타임 중에 나타납니다.
편집: 설정도 필요합니다.layer.borderWidth
선택한 색상의 테두리를 보려면 1 이상이어야 합니다.
Swift 2.0의 경우:
extension CALayer {
@objc var borderUIColor: UIColor {
set {
self.borderColor = newValue.CGColor
}
get {
return UIColor(CGColor: self.borderColor!)
}
}
}
Swift 3.0의 경우:
extension CALayer {
@objc var borderUIColor: UIColor {
set {
self.borderColor = newValue.cgColor
}
get {
return UIColor(cgColor: self.borderColor!)
}
}
}
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
}
}
}
그런 다음 유틸리티 패널 > 속성 검사기의 모든 버튼, imageView, 레이블 등에 대해 인터페이스 빌더에서 사용할 수 있습니다.
참고: 테두리는 런타임에만 나타납니다.
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 등)에 대한 스토리보드에서 이를 확인할 수 있습니다.
바로 그거야..범주를 가져올 필요가 없습니다. 범주의 파일을 프로젝트에 추가하고 스토리보드에서 이러한 속성을 확인하기만 하면 됩니다.
스위프트 3 및 4의 경우, 사용할 의사가 있는 경우IBInspectable
s, 다음과 같은 것이 있습니다.
@IBDesignable extension UIView {
@IBInspectable var borderColor:UIColor? {
set {
layer.borderColor = newValue!.cgColor
}
get {
if let color = layer.borderColor {
return UIColor(cgColor: color)
}
else {
return nil
}
}
}
@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
}
}
}
이것은 속성을 설정할 수 있지만 실제로 IB에 반영되지 않습니다.따라서 기본적으로 IB에 코드를 작성하는 경우 소스 코드로 작성하는 것이 좋습니다.
당신이 설정할 때만 절대적으로 가능합니다.layer.masksToBounds = true
그리고 당신은 휴식을 취합니다.
여기서 모든 솔루션을 시도해도 스토리보드가 항상 작동하지 않습니다.
그래서 항상 완벽한 답은 코드를 사용하는 것입니다. 그냥 UIView의 IBOutlet 인스턴스를 만들고 속성을 추가하면 됩니다.
단답:
layer.cornerRadius = 10
layer.borderWidth = 1
layer.borderColor = UIColor.blue.cgColor
긴 답변:
UIView/UIButton의 둥근 모서리 등
customUIView.layer.cornerRadius = 10
테두리 두께
pcustomUIView.layer.borderWidth = 2
테두리 색
customUIView.layer.borderColor = UIColor.blue.cgColor
다음 두 줄의 간단한 코드를 추가하십시오.
self.YourViewName.layer.cornerRadius = 15
self.YourViewName.layer.masksToBounds = true
잘 될 겁니다.
언급URL : https://stackoverflow.com/questions/12301256/is-it-possible-to-set-uiview-border-properties-from-interface-builder
'programing' 카테고리의 다른 글
그리드 보기 - 비어 있는 데이터 원본에 헤더 표시 (0) | 2023.06.20 |
---|---|
하나의 명령으로 모든 git remote에 푸시할 수 있습니까? (0) | 2023.06.20 |
패턴에 따라 부분 문자열 추출 (0) | 2023.06.20 |
Oracle에 연결된 SQL Server에서 SQL 쿼리를 작성할 때 날짜 리터럴을 지정하려면 어떻게 해야 합니까? (0) | 2023.06.20 |
캐시를 비우고 모든 대상 Xcode 4 이상을 정리하는 방법 (0) | 2023.06.20 |