वहाँ एक तरह से बनाया गया है गोल कोनों UILabels बनाने के लिए? यदि उत्तर नहीं है, तो कोई ऐसी वस्तु बनाने के बारे में कैसे जाएगा?
वहाँ एक तरह से बनाया गया है गोल कोनों UILabels बनाने के लिए? यदि उत्तर नहीं है, तो कोई ऐसी वस्तु बनाने के बारे में कैसे जाएगा?
जवाबों:
iPhone OS 3.0 और बाद cornerRadius
में CALayer
वर्ग पर संपत्ति का समर्थन करता है । हर दृश्य में एक CALayer
उदाहरण है कि आप हेरफेर कर सकते हैं। इसका मतलब है कि आप एक पंक्ति में गोल कोने प्राप्त कर सकते हैं:
view.layer.cornerRadius = 8;
आपको #import <QuartzCore/QuartzCore.h>
कैलेयर के हेडर और संपत्तियों तक पहुंच प्राप्त करने के लिए क्वार्ट्जकोर फ्रेमवर्क से लिंक करना होगा।
इसे करने का एक तरीका, जिसे मैंने हाल ही में उपयोग किया है, वह है यूआईवीईवाई उपवर्ग का निर्माण करना जो बस एक गोल आयत खींचता है, और फिर यूआईबेल या, मेरे मामले में, यूआईटैक्सव्यू, इसके अंदर एक सबव्यू। विशेष रूप से:
UIView
उपवर्ग बनाएँ और इसे कुछ इस तरह नाम दें RoundRectView
।RoundRectView
की drawRect:
विधि, गोलाकार कोनों के लिए किनारों और और CGContextAddArcToPoint () के लिए () CGContextAddLineToPoint तरह कोर ग्राफिक्स कॉल का उपयोग दृश्य की सीमाएँ चारों ओर एक मार्ग बनाना।UILabel
उदाहरण बनाएं और इसे RoundRectView का एक उप-भाग बनाएं।label.frame = CGRectInset(roundRectView.bounds, 8, 8);
)यदि आप एक सामान्य यूआईवीयूवी बनाते हैं और फिर इंस्पेक्टर का उपयोग करके इसकी कक्षा को बदलते हैं, तो आप इंटरफ़ेस बिल्डर का उपयोग करके राउंडरेक्ट व्यू को रख सकते हैं। जब तक आप अपने ऐप को संकलित नहीं करते हैं, तब तक आप आयत नहीं देखेंगे, लेकिन कम से कम आप सबव्यू को जगह देने में सक्षम होंगे और ज़रूरत पड़ने पर इसे आउटलेट या क्रियाओं से जोड़ सकते हैं।
IOS 7.1 या बाद वाले डिवाइस के लिए, आपको जोड़ने की आवश्यकता है:
yourUILabel.layer.masksToBounds = YES;
yourUILabel.layer.cornerRadius = 8.0;
स्विफ्ट IOS8 के लिए OSCarsWyck उत्तर के आधार पर:
yourUILabel.layer.masksToBounds = true
yourUILabel.layer.cornerRadius = 8.0
YES
हो true
।
आप इस तरह से किसी भी नियंत्रण की सीमा के साथ गोल सीमा बना सकते हैं: -
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
।
नोट: - आयात करना न भूलें<QuartzCore/QuartzCore.h>
मैंने UILabel
इस प्रभाव को प्राप्त करने के लिए एक तेज उपवर्ग बनाया । इसके अलावा मैं अपने आप ही टेक्स्ट कलर को मैक्सिमम कंट्रास्ट के लिए ब्लैक या व्हाइट में सेट कर देता हूं।
प्रयुक्त SO-पोस्ट:
बस इसे आईओएस प्लेग्राउंड में पेस्ट करें:
//: 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 आईओएस 9.3.2
_siteLabel.layer.masksToBounds = true;
_siteLabel.layer.cornerRadius = 8;
यदि आप चाहते हैं यूआई के गोल कोने की तरह वस्तुओं ( UILabel
, UIView
, UIButton
, UIImageView
) स्टोरीबोर्ड से तो सेट clip to bounds
सच्चे और सेट User Defined Runtime Attributes
के रूप में कुंजी पथ
layer.cornerRadius
, type = संख्या और मूल्य = 9 (आपकी आवश्यकता के रूप में)
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
label.text = @"Your String.";
label.layer.cornerRadius = 8.0;
[self.view addSubview:label];
यदि आप पृष्ठभूमि के रंग के साथ गोल लेबल चाहते हैं, तो अधिकांश अन्य उत्तरों के अलावा, आपको 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
करना होगा, अन्यथा पाठ को संरेखित किया जाएगा।
Monotouch / Xamarin.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;
स्विफ्ट 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
}
एक्सगस्ट 2017 के दौरान स्विफ्ट 3 के साथ एक्सकोड 8.1.2 में ठीक काम करता है
"कोनेरेडियस" गोल किनारों को सेट करने के लिए महत्वपूर्ण संपत्ति है, जहां यदि आप अपने आवेदन में सभी लेबल के लिए एक ही शैली का उपयोग कर रहे हैं, तो मैं एक विस्तार विधि के लिए सिफारिश करूंगा।
कोड:
// 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
}
}
आउटपुट:
एक्सटेंशन विधि क्यों?
एक स्विफ्ट फ़ाइल बनाएं और निम्नलिखित कोड जोड़ें, जिसमें एक्सटेंशन विधि "UILabel" वर्ग है, जहां यह विधि उपयोगकर्ता परिभाषित है, लेकिन आपके एप्लिकेशन के सभी लेबल के लिए काम करेगी और यदि आप चाहें तो स्थिरता और स्वच्छ कोड बनाए रखने में मदद करेंगे। भविष्य में किसी भी शैली को बदलने के लिए केवल विस्तार विधि की आवश्यकता होती है।
आप जो कर रहे हैं उसके आधार पर आप एक छवि बना सकते हैं और इसे पृष्ठभूमि के रूप में प्रोग्राम के रूप में सेट कर सकते हैं।