아이폰에서 둥근 모서리 UILABEL을 작성하려면 어떻게 해야 하나요?
둥근 모서리의 UILABEL을 만들 수 있는 방법이 있습니까?'아니오'라고 대답하면 어떻게 그런 오브젝트를 만들 수 있을까요?
iOS 3.0 이후
iPhone OS 3.0 이후에서는cornerRadius
의 부동산CALayer
클래스. 모든 뷰에는CALayer
조작할 수 있는 인스턴스입니다.즉, 모서리를 한 줄로 둥글게 만들 수 있습니다.
view.layer.cornerRadius = 8;
할 필요가 있다#import <QuartzCore/QuartzCore.h>
QuartzCore 프레임워크에 링크하여 CALayer의 헤더 및 속성에 액세스합니다.
iOS 3.0 이전 버전
최근에 사용한 방법 중 하나는 둥근 직사각형을 그리는 UIView 서브클래스를 만들고 그 안에 UILabel 또는 UITextView를 만드는 것입니다.구체적으로는:
- 작성하다
UIView
서브클래스와 같은 이름을 붙이다RoundRectView
. - 인
RoundRectView
의drawRect:
메서드는 모서리에는 CGContextAddLineToPoint() 및 둥근 모서리에는 CGContextAddArcToPoint() 등의 코어 그래픽 호출을 사용하여 뷰 경계에 경로를 그립니다. - 작성하다
UILabel
RoundRectView 서브뷰로 만듭니다. - 라벨의 프레임을 RoundRectView 경계에 몇 픽셀 삽입하도록 설정합니다(예:
label.frame = CGRectInset(roundRectView.bounds, 8, 8);
)
범용 UIView를 작성한 후 인스펙터를 사용하여 클래스를 변경하는 경우 Interface Builder를 사용하여 RoundRectView를 뷰에 배치할 수 있습니다.앱을 컴파일하여 실행할 때까지는 직사각형이 표시되지 않지만 최소한 서브뷰를 배치하여 필요한 경우 콘센트나 작업에 연결할 수 있습니다.
iOS 7.1 이후가 설치된 디바이스의 경우 다음을 추가해야 합니다.
yourUILabel.layer.masksToBounds = YES;
yourUILabel.layer.cornerRadius = 8.0;
OScarsWyck에 기반한 Swift IOS8 이후의 경우:
yourUILabel.layer.masksToBounds = true
yourUILabel.layer.cornerRadius = 8.0
- 가지고 있습니다.
UILabel
호출:myLabel
. - "m" 또는 "h" 파일 Import:
#import <QuartzCore/QuartzCore.h>
당신의 안에서
viewDidLoad
다음 행을 적습니다.self.myLabel.layer.cornerRadius = 8;
- 는 cornerRadius 값을 8에서 다른 숫자로 변경하는 방법에 따라 달라집니다.
행운을 빌어요
다음과 같은 방법으로 컨트롤의 테두리 너비와 함께 둥근 테두리를 만들 수 있습니다.
CALayer * l1 = [lblName layer];
[l1 setMasksToBounds:YES];
[l1 setCornerRadius:5.0];
// You can even add a border
[l1 setBorderWidth:5.0];
[l1 setBorderColor:[[UIColor darkGrayColor] CGColor]];
교환만 하면 됩니다.lblName
당신의 것과 함께UILabel
.
주의: - Import하는 것을 잊지 마십시오.<QuartzCore/QuartzCore.h>
스위프트 3
배경색을 포함한 둥근 라벨을 원하는 경우 다른 대부분의 답변과 함께 다음을 설정해야 합니다.layer
의 배경색도 표시됩니다.설정할 때 작동하지 않습니다.view
배경색
label.layer.cornerRadius = 8
label.layer.masksToBounds = true
label.layer.backgroundColor = UIColor.lightGray.cgColor
자동 레이아웃을 사용하는 경우 레이블 주위에 패딩을 넣고 레이블 크기를 수동으로 설정하지 않으려면 UILabel 하위 클래스를 만들고 재정의할 수 있습니다.intrinsincContentSize
★★★★
class LabelWithPadding: UILabel {
override var intrinsicContentSize: CGSize {
let defaultSize = super.intrinsicContentSize
return CGSize(width: defaultSize.width + 12, height: defaultSize.height + 8)
}
}
하려면 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 을 설정해야 합니다.label.textAlignment = center
그렇지 않으면 텍스트가 정렬됩니다.
UILabel
서브클래스로 설정합니다.또한 텍스트 색상을 검정 또는 흰색으로 자동 설정하여 대비가 극대화됩니다.
결과
사용 SO 포스트:
놀이터.
iOS Playground에 붙여넣기만 하면 됩니다.
//: Playground - noun: a place where people can play
import UIKit
class PillLabel : UILabel{
@IBInspectable var color = UIColor.lightGrayColor()
@IBInspectable var cornerRadius: CGFloat = 8
@IBInspectable var labelText: String = "None"
@IBInspectable var fontSize: CGFloat = 10.5
// This has to be balanced with the number of spaces prefixed to the text
let borderWidth: CGFloat = 3
init(text: String, color: UIColor = UIColor.lightGrayColor()) {
super.init(frame: CGRectMake(0, 0, 1, 1))
labelText = text
self.color = color
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup(){
// This has to be balanced with the borderWidth property
text = " \(labelText)".uppercaseString
// Credits to https://stackoverflow.com/a/33015915/784318
layer.borderWidth = borderWidth
layer.cornerRadius = cornerRadius
backgroundColor = color
layer.borderColor = color.CGColor
layer.masksToBounds = true
font = UIFont.boldSystemFontOfSize(fontSize)
textColor = color.contrastColor
sizeToFit()
// Credits to https://stackoverflow.com/a/15184257/784318
frame = CGRectInset(self.frame, -borderWidth, -borderWidth)
}
}
extension UIColor {
// Credits to https://stackoverflow.com/a/29044899/784318
func isLight() -> Bool{
var green: CGFloat = 0.0, red: CGFloat = 0.0, blue: CGFloat = 0.0, alpha: CGFloat = 0.0
self.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
let brightness = ((red * 299) + (green * 587) + (blue * 114) ) / 1000
return brightness < 0.5 ? false : true
}
var contrastColor: UIColor{
return self.isLight() ? UIColor.blackColor() : UIColor.whiteColor()
}
}
var label = PillLabel(text: "yellow", color: .yellowColor())
label = PillLabel(text: "green", color: .greenColor())
label = PillLabel(text: "white", color: .whiteColor())
label = PillLabel(text: "black", color: .blackColor())
xCode 7.3.1 iOS 9.3.2
_siteLabel.layer.masksToBounds = true;
_siteLabel.layer.cornerRadius = 8;
같은 의 둥근 모서리를 ([([[[[UI] UI])]).UILabel
,UIView
,UIButton
,UIImageView
)를 스토리보드별로 clip to bounds
로 설정하다User Defined Runtime Attributes
(「」)layer.cornerRadius
및 값 = = 숫자 및 값 = 9(필요한 경우)를 입력합니다
또 다른 방법은 UILabel 뒤에 png를 배치하는 것입니다.개별 라벨의 모든 아트워크가 포함된 단일 배경 png를 겹치는 여러 라벨이 있는 뷰가 있습니다.
Xcode 8.1.2에서 Swift 3으로 정상적으로 동작합니다.
.cornerRadius
둥근 모서리를 설정하는 주요 속성입니다.어플리케이션의 모든 라벨에 같은 스타일을 사용하고 있다면 확장 방법을 추천합니다.
코드:
// extension Class
extension UILabel {
// extension user defined Method
func setRoundEdge() {
let myGreenColor = (UIColor(red: -0.108958, green: 0.714926, blue: 0.758113, alpha: 1.0))
//Width of border
self.layer.borderWidth = 1.0
//How much the edge to be rounded
self.layer.cornerRadius = 5.0
// following properties are optional
//color for border
self.layer.borderColor = myGreenColor.cgColor
//color for text
self.textColor = UIColor.red
// Mask the bound
self.layer.masksToBounds = true
//clip the pixel contents
self.clipsToBounds = true
}
}
출력:
확장 방법을 선택하는 이유
Swift 파일을 만들고 다음 코드를 추가합니다.이러한 코드는 사용자 정의이지만 응용 프로그램의 모든 라벨에 대해 작동하며 향후 확장 방식에서만 스타일을 변경할 경우 일관성을 유지하고 코드를 정리하는 데 도움이 됩니다.
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
label.text = @"Your String.";
label.layer.cornerRadius = 8.0;
[self.view addSubview:label];
모노토치 / 자마린에서.iOS는 다음과 같은 문제를 해결했습니다.
UILabel exampleLabel = new UILabel(new CGRect(0, 0, 100, 50))
{
Text = "Hello Monotouch red label"
};
exampleLabel.Layer.MasksToBounds = true;
exampleLabel.Layer.CornerRadius = 8;
exampleLabel.Layer.BorderColor = UIColor.Red.CGColor;
exampleLabel.Layer.BorderWidth = 2;
Swift 2.0에서 완벽하게 동작
@IBOutlet var theImage: UIImageView! //you can replace this with any UIObject eg: label etc
override func viewDidLoad() {
super.viewDidLoad()
//Make sure the width and height are same
self.theImage.layer.cornerRadius = self.theImage.frame.size.width / 2
self.theImage.layer.borderWidth = 2.0
self.theImage.layer.borderColor = UIColor.whiteColor().CGColor
self.theImage.clipsToBounds = true
}
사용해보셨나요?UIButton
.정적 텍스트만 표시할 수 있습니다.
당신이 정확히 무엇을 하고 있는지에 따라 당신은 이미지를 만들고 그것을 프로그램적으로 배경으로 설정할 수 있다.
언급URL : https://stackoverflow.com/questions/510382/how-do-i-create-a-round-cornered-uilabel-on-the-iphone
'programing' 카테고리의 다른 글
WPF에 동등한 MessageBox가 있습니까? (0) | 2023.04.14 |
---|---|
기존의 글꼴 크기 및 문자의 WPF 텍스트 블록 너비를 계산하는 방법은 무엇입니까? (0) | 2023.04.14 |
Swift Date 객체를 작성하려면 어떻게 해야 합니까? (0) | 2023.04.14 |
SQL Server DateTime 데이터 유형에서 날짜만 반환하는 방법 (0) | 2023.04.14 |
Windows 명령줄에서 폴더 크기 가져오기 (0) | 2023.04.14 |