मैं कैसे एक दौर iPhone पर UILabel हड़प बना सकता हूँ?

वोट
139

दौर कोनों UILabels बनाने के लिए रास्ते में एक निर्मित वहाँ है? जवाब नहीं है, कैसे एक ऐसे एक वस्तु बनाने के बारे में जाना होगा?

04/02/2009 को 08:19
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


16 जवाब

वोट
223

आईओएस 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 में है। विशेष रूप से:

  1. एक बनाएं UIViewउपवर्ग और यह जैसा कोई नाम RoundRectView
  2. में RoundRectViewकी drawRect:विधि, एक मार्ग बनाना आसपास कोर ग्राफिक्स का उपयोग कर दृश्य की सीमाएँ किनारों के लिए CGContextAddLineToPoint () और और CGContextAddArcToPoint () गोलाकार कोनों के लिए की तरह कहता है।
  3. एक बनाएं UILabelउदाहरण है और यह RoundRectView की एक subview बनाते हैं।
  4. लेबल की अवधि सेट करें RoundRectView की सीमा से इनसेट में कुछ पिक्सेल का होना। (उदाहरण के लिए, label.frame = CGRectInset(roundRectView.bounds, 8, 8);)

आप इंटरफ़ेस बिल्डर का उपयोग कर यदि आप एक सामान्य UIView बनाने और उसके बाद निरीक्षक का उपयोग कर अपने वर्ग बदलने के लिए एक दृश्य पर RoundRectView रख सकते हैं। जब तक आप संकलित करके उसे अपने अनुप्रयोग चलाने आप आयत नहीं देखेंगे, लेकिन कम से कम आप subview जगह है और यह आउटलेट या कार्यों से कनेक्ट यदि आवश्यक हो तो कर सकेंगे।

04/02/2009 को 10:22
का स्रोत उपयोगकर्ता

वोट
130

आईओएस 7.1 या बाद के साथ उपकरणों के लिए, आप जोड़ने की जरूरत है:

yourUILabel.layer.masksToBounds = YES;
yourUILabel.layer.cornerRadius = 8.0;
04/04/2014 को 08:54
का स्रोत उपयोगकर्ता

वोट
17

स्विफ्ट iOS8 के लिए बाद OScarsWyck उत्तर के आधार पर:

yourUILabel.layer.masksToBounds = true
yourUILabel.layer.cornerRadius = 8.0
17/08/2015 को 16:08
का स्रोत उपयोगकर्ता

वोट
11

आप इस तरह से किसी भी नियंत्रण की सीमा की चौड़ाई के साथ गोल सीमा कर सकते हैं: -

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>

13/02/2014 को 09:09
का स्रोत उपयोगकर्ता

वोट
11
  1. आप एक है UILabelकहा जाता है: myLabel
  2. अपने "एम" या "h" फ़ाइल आयात में: #import <QuartzCore/QuartzCore.h>
  3. अपने में viewDidLoadलिखने इस लाइन:self.myLabel.layer.cornerRadius = 8;

    • आप कैसे आप अन्य नंबर 8 से cornerRadius मूल्य बदल सकते हैं पर निर्भर करता है :)

सौभाग्य

04/12/2012 को 11:08
का स्रोत उपयोगकर्ता

वोट
6

Xcode 7.3.1 आईओएस 9.3.2

 _siteLabel.layer.masksToBounds = true;
  _siteLabel.layer.cornerRadius = 8;
21/07/2016 को 11:22
का स्रोत उपयोगकर्ता

वोट
6

एक अन्य विधि UILabel के पीछे एक png जगह है। मैं कई लेबल है कि एक ही पृष्ठभूमि png अलग-अलग लेबल के लिए सभी कलाकृति है कि ओवरले के साथ विचार है।

04/02/2009 को 18:24
का स्रोत उपयोगकर्ता

वोट
4
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
    label.text = @"Your String.";
    label.layer.cornerRadius = 8.0;
    [self.view addSubview:label];
21/05/2014 को 07:44
का स्रोत उपयोगकर्ता

वोट
3

यदि आप चाहते हैं की तरह वस्तुओं यूआई के गोल कोने ( UILabel, UIView, UIButton, UIImageView) स्टोरीबोर्ड तो सेट से clip to boundsसही और सेट User Defined Runtime Attributesके रूप में कुंजी पथ layer.cornerRadius, type = संख्या और मूल्य = 9 (आपकी आवश्यकता के रूप में)

के रूप में सीमा के लिए क्लिप सेट सेट उपयोगकर्ता निर्धारित क्रम के रूप में गुण

28/06/2017 को 10:49
का स्रोत उपयोगकर्ता

वोट
3

मैं एक तेज किए गए UILabelइस प्रभाव को प्राप्त करने के लिए उपवर्ग। इसके अलावा मैं अपने आप पाठ का रंग या तो काला या अधिक से अधिक इसके विपरीत के लिए सफेद निर्धारित किया है।

परिणाम

रंग-गोल सीमाओं

प्रयुक्त SO-पोस्ट:

खेल का मैदान

बस एक 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())
30/03/2016 को 14:16
का स्रोत उपयोगकर्ता

वोट
2

स्विफ्ट 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 विधि है जोड़ने भविष्य में किसी भी शैली को बदलने केवल विस्तार विधि में आवश्यकता होती है।

15/08/2017 को 13:25
का स्रोत उपयोगकर्ता

वोट
2

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;
14/01/2016 को 14:23
का स्रोत उपयोगकर्ता

वोट
2

आप उपयोग कर की कोशिश की UIButtonइंटरफ़ेस बिल्डर से (जो कोने गोल है) और सेटिंग्स के साथ प्रयोग कर यह एक लेबल की तरह लग रहे बनाने के लिए। सभी आप चाहते हैं के भीतर स्थिर पाठ प्रदर्शित करने के लिए है अगर।

09/03/2009 को 21:45
का स्रोत उपयोगकर्ता

वोट
1

स्विफ्ट 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, अन्यथा पाठ गठबंधन रह जायेंगे।

29/05/2017 को 21:52
का स्रोत उपयोगकर्ता

वोट
1

स्विफ्ट 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

    }
16/04/2016 को 22:02
का स्रोत उपयोगकर्ता

वोट
0

क्या आप वास्तव में क्या कर रहे हैं पर निर्भर करता है एक छवि बनाने के लिए और यह पृष्ठभूमि के रूप में प्रोग्राम के सेट कर सकते हैं।

05/11/2011 को 01:55
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more