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

















