Πώς μπορώ να δημιουργήσω ένα στρογγυλό στρίμωξε UILabel για το iPhone;

ψήφοι
139

Υπάρχει ένα ενσωματωμένο στο δρόμο για να δημιουργήσει γύρω από γωνίες UILabels; Εάν η απάντηση δεν είναι, πώς το ένα θα πάει για τη δημιουργία ενός τέτοιου αντικειμένου;

Δημοσιεύθηκε 04/02/2009 στις 08:19
πηγή χρήστη
Σε άλλες γλώσσες...                            


16 απαντήσεις

ψήφοι
223

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, μια δευτερεύουσας προβολής μέσα από αυτό. ΕΙΔΙΚΑ:

  1. Δημιουργήστε μια UIViewυποκατηγορία και το όνομα κάτι σαν RoundRectView.
  2. Στο RoundRectView«s drawRect:μέθοδο, να σχεδιάσετε μια διαδρομή γύρω από τα όρια της άποψης που χρησιμοποιούν πυρήνα γραφικών καλεί όπως CGContextAddLineToPoint () για τις άκρες και και CGContextAddArcToPoint () για τις στρογγυλεμένες γωνίες.
  3. Δημιουργήστε ένα UILabelπαράδειγμα και να κάνουν ένα δευτερεύουσας προβολής του RoundRectView.
  4. Ορίστε το πλαίσιο της ετικέτας είναι μερικά pixels ένθετο των ορίων του RoundRectView του. (Για παράδειγμα, label.frame = CGRectInset(roundRectView.bounds, 8, 8);)

Μπορείτε να τοποθετήσετε το RoundRectView σε μια προβολή με τη χρήση Interface Builder, εάν δημιουργήσετε μια γενική UIView και στη συνέχεια να αλλάξετε κατηγορία του με τη χρήση του επιθεωρητή. Δεν θα δείτε το ορθογώνιο μέχρι να καταρτίζουν και να τρέξει η εφαρμογή σας, αλλά τουλάχιστον θα είστε σε θέση να τοποθετήσετε το δευτερεύουσας προβολής και συνδέστε το με καταστήματα ή ενέργειες, αν χρειαστεί.

Απαντήθηκε 04/02/2009 στις 10:22
πηγή χρήστη

ψήφοι
130

Για συσκευές με iOS 7.1 ή νεότερη έκδοση, θα πρέπει να προσθέσετε:

yourUILabel.layer.masksToBounds = YES;
yourUILabel.layer.cornerRadius = 8.0;
Απαντήθηκε 04/04/2014 στις 08:54
πηγή χρήστη

ψήφοι
17

Για Swift 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. σε «m» ή «η» εισαγωγή του αρχείου σας: #import <QuartzCore/QuartzCore.h>
  3. που σου viewDidLoadγράφουν αυτή τη γραμμή:self.myLabel.layer.cornerRadius = 8;

    • εξαρτάται από το πόσο θέλετε μπορείτε να αλλάξετε την αξία cornerRadius από 8 έως άλλον αριθμό :)

Καλή τύχη

Απαντήθηκε 04/12/2012 στις 11:08
πηγή χρήστη

ψήφοι
6

Xcode 7.3.1 iOS 9.3.2

 _siteLabel.layer.masksToBounds = true;
  _siteLabel.layer.cornerRadius = 8;
Απαντήθηκε 21/07/2016 στις 11:22
πηγή χρήστη

ψήφοι
6

Μια άλλη μέθοδος είναι να τοποθετήσετε ένα png πίσω από το UILabel. Έχω απόψεων με αρκετές ετικέτες που επικαλύπτουν ένα ενιαίο πλαίσιο 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

Αν θέλετε στρογγυλεμένη γωνία UI αντικείμενα όπως ( UILabel, UIView, UIButton, UIImageView) από storyboard τότε που clip to boundsαληθείς και που User Defined Runtime AttributesKey πορεία όπως layer.cornerRadius, ο τύπος = αριθμός και η αξία = 9 (ως απαίτηση σας)

Ορίστε κλιπ σε όρια ως Set User Defined Runtime Χαρακτηριστικά όπως

Απαντήθηκε 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

Δουλεύει καλά σε Xcode 8.1.2 με Swift 3, Δοκιμασμένο κατά τη διάρκεια Αυγ 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
    }
}

Παραγωγή:

εισάγετε περιγραφή της εικόνας εδώ

Γιατί μέθοδο επέκτασης;

Δημιουργήστε ένα αρχείο Swift και προσθέστε τον ακόλουθο κώδικα, το οποίο έχει την μέθοδο Παράταση στην κατηγορία «UILabel», όπου η μέθοδος αυτή ορίζει ο χρήστης, αλλά θα λειτουργήσει για όλη την ετικέτα στην εφαρμογή σας και θα σας βοηθήσει να διατηρηθεί η συνοχή και καθαρό κώδικα, που αν αλλάζουν κάθε στυλ στο μέλλον να απαιτούν μόνο στη μέθοδο επέκτασης.

Απαντήθηκε 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από τον κατασκευαστή Interface (που έχει στρογγυλεμένες γωνίες) και τον πειραματισμό με τις ρυθμίσεις για να φανεί σαν μια ετικέτα. αν το μόνο που θέλετε είναι να εμφανίσετε στατικό κείμενο μέσα.

Απαντήθηκε 09/03/2009 στις 21:45
πηγή χρήστη

ψήφοι
1

Swift 3

Αν θέλετε στρογγυλεμένες ετικέτα με το χρώμα του φόντου, εκτός από τις περισσότερες από τις άλλες απαντήσεις, θα πρέπει να ρυθμίσετε layer«s χρώμα του φόντου, καθώς και. Δεν λειτουργεί κατά τον καθορισμό viewχρώμα του φόντου.

label.layer.cornerRadius = 8
label.layer.masksToBounds = true
label.layer.backgroundColor = UIColor.lightGray.cgColor

Εάν χρησιμοποιείτε διάταξη αυτοκινήτων, θέλουν κάποιο padding γύρω από την ετικέτα και δεν θέλετε να ορίσετε το μέγεθος της ετικέτας με μη αυτόματο τρόπο, μπορείτε να δημιουργήσετε 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

Λειτουργεί τέλεια σε 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

    }
Απαντήθηκε 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