Bagaimana cara mengatur perataan kiri atas untuk UILabel untuk aplikasi iOS?


99

Saya telah menambahkan satu label di file ujung pena saya, lalu diperlukan perataan kiri atas untuk label itu. Karena saya menyediakan teks saat runtime jadi tidak yakin berapa banyak baris yang ada. Jadi jika teks hanya berisi satu baris, maka teks tersebut muncul sebagai rata tengah vertikal. Penjajaran itu tidak sesuai dengan label saya masing-masing di depannya.

Sebagai contoh:

masukkan deskripsi gambar di sini

Yang terlihat aneh :(

Apakah ada cara untuk menyetel teks label ke kanan atas perataan?


Jawaban:



64

Ini cukup mudah dilakukan. Buat UILabelsublcass dengan verticalAlignmentproperti dan timpa textRectForBounds:limitedToNumberOfLinesuntuk mengembalikan batas yang benar untuk perataan vertikal atas, tengah, atau bawah. Berikut kodenya:

SOLabel.h

#import <UIKit/UIKit.h>

typedef enum
{
    VerticalAlignmentTop = 0, // default
    VerticalAlignmentMiddle,
    VerticalAlignmentBottom,
} VerticalAlignment;

@interface SOLabel : UILabel

   @property (nonatomic, readwrite) VerticalAlignment verticalAlignment;

@end

SOLabel.m

@implementation SOLabel

-(id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (!self) return nil;

    // set inital value via IVAR so the setter isn't called
    _verticalAlignment = VerticalAlignmentTop;

    return self;
}

-(VerticalAlignment) verticalAlignment
{
    return _verticalAlignment;
}

-(void) setVerticalAlignment:(VerticalAlignment)value
{
    _verticalAlignment = value;
    [self setNeedsDisplay];
}

// align text block according to vertical alignment settings
-(CGRect)textRectForBounds:(CGRect)bounds 
    limitedToNumberOfLines:(NSInteger)numberOfLines
{
   CGRect rect = [super textRectForBounds:bounds 
                   limitedToNumberOfLines:numberOfLines];
    CGRect result;
    switch (_verticalAlignment)
    {
       case VerticalAlignmentTop:
          result = CGRectMake(bounds.origin.x, bounds.origin.y, 
                              rect.size.width, rect.size.height);
           break;

       case VerticalAlignmentMiddle:
          result = CGRectMake(bounds.origin.x, 
                    bounds.origin.y + (bounds.size.height - rect.size.height) / 2,
                    rect.size.width, rect.size.height);
          break;

       case VerticalAlignmentBottom:
          result = CGRectMake(bounds.origin.x, 
                    bounds.origin.y + (bounds.size.height - rect.size.height),
                    rect.size.width, rect.size.height);
          break;

       default:
          result = bounds;
          break;
    }
    return result;
}

-(void)drawTextInRect:(CGRect)rect
{
    CGRect r = [self textRectForBounds:rect 
                limitedToNumberOfLines:self.numberOfLines];
    [super drawTextInRect:r];
}

@end

3
Saya juga mencoba banyak solusi lain di sini di SO sebelum menjalankan yang satu ini. Ini bekerja dengan sempurna! Perlu diingat bahwa jika Anda melakukan ini di StoryBoard, pastikan Anda menyetel atribut CustomClass ke SOLabel (atau apa pun yang Anda putuskan untuk menamainya), bukan UILabel (di Utilities Inspector).
TMc

Ini sangat membantu, terima kasih. Ini tidak berfungsi untuk teks rata tengah atau kanan, tetapi menggunakan bounds.size.widthalih-alih rect.size.widthdalam textRectForBounds:limitedToNumberOfLines:tampaknya memperbaikinya.
Geoff Hackworth

1
Jika Anda menemukan 'Thread 1: EXC_BAD_ACCESS (Code 2, address = 0x ...)' di iOS 9 Xcode 7, Cukup hapus setter dan getter - (VerticalAlignment) verticalAlignment; dan - (void) setVerticalAlignment: fungsi nilai (VerticalAlignment), karena variabelnya adalah @property. Ini disintesis dan berisi pengakses.
felixwcf

saya telah melakukan beberapa amandemen di sini dalam metode: "textRectForBounds" - result = CGRectMake (rect.origin.x, bounds.origin.y, rect.size.width, rect.size.height); Untuk membuat karya saya untuk rightAlignment UILable.
g212gs

50

Saya menemukan solusi menggunakan AutoLayout di StoryBoard.

1) Atur tidak ada baris ke 0 dan perataan teks ke Kiri.

masukkan deskripsi gambar di sini

2) Tetapkan batasan tinggi.

masukkan deskripsi gambar di sini

3) Batasan tinggi harus dalam Relasi - Kurang Dari atau Sama

masukkan deskripsi gambar di sini

4)

   override func viewWillLayoutSubviews() {
        sampleLabel.sizeToFit()
    }

Saya mendapatkan hasil sebagai berikut:

masukkan deskripsi gambar di sini


2
Bekerja seperti pesona, bahkan dalam UITableViewCell dengan penggunaan kembali.
alex.bour

Apakah Anda menempatkan viewWillLayoutSubviewsdi pengontrol atau file sel? Jika pengontrol, bagaimana cara mengakses UILabel dari sel?
Craig.Pearce

Di mana Anda meletakkan langkah 4? Sebagai pengguna baru, saya sangat senang memiliki solusi UI murni, lalu kode itu muncul entah dari mana dan kami tidak diberi tahu di mana harus meletakkannya
velkoon

Baik di SampleClass.swift atau SampleTableViewCell.swift
AG

Ini harus menjadi Solusinya. Bekerja dengan sempurna, tidak perlu peretasan atau subclass.
Curious101

44

SOLabel bekerja untuk saya.

Swift 3 & 5:

Versi ini telah diperbarui dari aslinya untuk memungkinkan dukungan untuk bahasa RTL:

public class VerticalAlignLabel: UILabel {
    enum VerticalAlignment {
        case top
        case middle
        case bottom
    }

    var verticalAlignment : VerticalAlignment = .top {
        didSet {
            setNeedsDisplay()
        }
    }

    override public func textRect(forBounds bounds: CGRect, limitedToNumberOfLines: Int) -> CGRect {
        let rect = super.textRect(forBounds: bounds, limitedToNumberOfLines: limitedToNumberOfLines)

        if UIView.userInterfaceLayoutDirection(for: .unspecified) == .rightToLeft {
            switch verticalAlignment {
            case .top:
                return CGRect(x: self.bounds.size.width - rect.size.width, y: bounds.origin.y, width: rect.size.width, height: rect.size.height)
            case .middle:
                return CGRect(x: self.bounds.size.width - rect.size.width, y: bounds.origin.y + (bounds.size.height - rect.size.height) / 2, width: rect.size.width, height: rect.size.height)
            case .bottom:
                return CGRect(x: self.bounds.size.width - rect.size.width, y: bounds.origin.y + (bounds.size.height - rect.size.height), width: rect.size.width, height: rect.size.height)
            }
        } else {
            switch verticalAlignment {
            case .top:
                return CGRect(x: bounds.origin.x, y: bounds.origin.y, width: rect.size.width, height: rect.size.height)
            case .middle:
                return CGRect(x: bounds.origin.x, y: bounds.origin.y + (bounds.size.height - rect.size.height) / 2, width: rect.size.width, height: rect.size.height)
            case .bottom:
                return CGRect(x: bounds.origin.x, y: bounds.origin.y + (bounds.size.height - rect.size.height), width: rect.size.width, height: rect.size.height)
            }
        }
    }

    override public func drawText(in rect: CGRect) {
        let r = self.textRect(forBounds: rect, limitedToNumberOfLines: self.numberOfLines)
        super.drawText(in: r)
    }
}

Cepat 1:

class UIVerticalAlignLabel: UILabel {

enum VerticalAlignment : Int {
    case VerticalAlignmentTop = 0
    case VerticalAlignmentMiddle = 1
    case VerticalAlignmentBottom = 2
}

var verticalAlignment : VerticalAlignment = .VerticalAlignmentTop {
    didSet {
        setNeedsDisplay()
    }
}

required init(coder aDecoder: NSCoder){
    super.init(coder: aDecoder)
}

override func textRectForBounds(bounds: CGRect, limitedToNumberOfLines: Int) -> CGRect {
    let rect = super.textRectForBounds(bounds, limitedToNumberOfLines: limitedToNumberOfLines)

    switch(verticalAlignment) {
        case .VerticalAlignmentTop:
            return CGRectMake(bounds.origin.x, bounds.origin.y, rect.size.width, rect.size.height)
        case .VerticalAlignmentMiddle:
            return CGRectMake(bounds.origin.x, bounds.origin.y + (bounds.size.height - rect.size.height) / 2, rect.size.width, rect.size.height)
        case .VerticalAlignmentBottom:
            return CGRectMake(bounds.origin.x, bounds.origin.y + (bounds.size.height - rect.size.height), rect.size.width, rect.size.height)
        default:
            return bounds
    }
}

override func drawTextInRect(rect: CGRect) {
    let r = self.textRectForBounds(rect, limitedToNumberOfLines: self.numberOfLines)
    super.drawTextInRect(r)
    }
}

Jika saya mencoba membuat label menggunakan kode ini: var myLabel = VerticalAlignLabel () Saya mendapatkan "Argumen yang hilang untuk parameter 'coder' dalam panggilan". Bagaimana cara membuat label menggunakan subkelas VerticalAlignLabel ini?
RanLearns

1
Coba Swift versi 3 sekarang - Saya memiliki init wajib yang tidak diperlukan.
totiG

14

Dalam kasus saya, itu adalah bottom spacemasalah kendala. Saya telah mengaturnya ke = 16.

Ketika saya mengaturnya ke bottom to >= 16, masalah ini terpecahkan.

Selain itu, jika Anda memiliki batasan ketinggian di label, Anda harus menghapusnya.

Berikut tampilan batasan label saya di size inspector:

paksaan


Saya tidak memiliki opsi Batasan saat memilih label.
velkoon

Perbaikan paling sederhana - biarkan kendala dan tata letak otomatis menanganinya. Terima kasih!
Jason

13

Dalam kode Anda

label.text = @"some text";
[label sizeToFit];

Berhati-hatilah jika Anda menggunakannya dalam sel tabel atau tampilan lain yang didaur ulang dengan data berbeda, Anda harus menyimpan bingkai asli di suatu tempat dan menyetel ulang sebelum memanggil sizeToFit.


Saya akan merekomendasikan untuk menyerahkan semuanya ke Autolayout pada saat ini. Ini tidak diperlukan lagi.
n13

9

Saya menemukan solusi lain untuk masalah yang sama. Saya menggunakan UITextViewalih-alih UILabeldan beralih editable()fungsi ke false.


@geekyaleks Mengapa ini adalah peretasan bodoh? Sepertinya solusi yang layak, apakah ada masalah lain selain tidak menjadi jawaban langsung untuk pertanyaan tersebut?
Christopher Larsen

Ini tidak sesuai, karena Anda tidak menggunakan komponen UI yang sesuai untuk pekerjaan itu. Ini seharusnya TIDAK menjadi kompromi untuk sesuatu yang sederhana seperti perataan vertikal. Perlu menggunakan komponen yang tepat untuk pekerjaan itu. Ada lagi yang meretas ...
geekyaleks

7

Saya juga mengalami masalah ini tetapi yang saya temukan adalah urutan pengaturan properti dan metode UILabel yang penting!

Jika Anda menelepon [label sizeToFit]sebelumnya label.font = [UIFont fontWithName:@"Helvetica" size:14];maka teks tidak sejajar dengan bagian atas tetapi jika Anda menukar mereka, maka itu benar!

Saya juga memperhatikan bahwa mengatur teks terlebih dahulu membuat perbedaan juga.

Semoga ini membantu.


Bagus. sizeToFit () harus dipanggil paling akhir.
MKatleast3

4

Saat Anda menggunakan pembuat antarmuka, setel batasan untuk label Anda (pastikan untuk menyetel tinggi dan lebar juga). Kemudian di Size Inspector, periksa tinggi untuk labelnya. Di sana Anda akan menginginkannya untuk membaca> = bukannya =. Kemudian dalam implementasi untuk pengontrol tampilan tersebut, setel jumlah baris ke 0 (juga dapat dilakukan di IB) dan setel label [label sizeToFit]; dan saat teks Anda bertambah panjang, label akan bertambah tinggi dan teks Anda tetap berada di kiri atas.


4

Jika yang Anda butuhkan adalah teks yang tidak dapat diedit yang secara default dimulai di sudut kiri atas Anda cukup menggunakan Tampilan Teks sebagai ganti label dan kemudian mengatur statusnya menjadi tidak dapat diedit, seperti ini:

textview.isEditable = false

Jauh lebih mudah daripada mengotak-atik label ...

Bersulang!


3

Solusi dengan SoLabel berhasil, Terima kasih.

Di bawah ini saya telah menambahkan versi monotouch:

    public class UICustomLabel : UILabel
{
    private UITextVerticalAlignment _textVerticalAlignment;

    public UICustomLabel()
    {
        TextVerticalAlignment = UITextVerticalAlignment.Top;
    }

    public UITextVerticalAlignment TextVerticalAlignment
    {
        get
        {
            return _textVerticalAlignment;
        }
        set
        {
            _textVerticalAlignment = value;
            SetNeedsDisplay();
        }
    }

    public override void DrawText(RectangleF rect)
    {
        var bound = TextRectForBounds(rect, Lines);
        base.DrawText(bound);
    }

    public override RectangleF TextRectForBounds(RectangleF bounds, int numberOfLines)
    {
        var rect = base.TextRectForBounds(bounds, numberOfLines);
        RectangleF resultRect;
        switch (TextVerticalAlignment)
        {
            case UITextVerticalAlignment.Top:
                resultRect = new RectangleF(bounds.X, bounds.Y, rect.Size.Width, rect.Size.Height);
                break;
            case UITextVerticalAlignment.Middle:
                resultRect = new RectangleF(bounds.X,
                                            bounds.Y + (bounds.Size.Height - rect.Size.Height)/2,
                                            rect.Size.Width, rect.Size.Height);
                break;
            case UITextVerticalAlignment.Bottom:
                resultRect = new RectangleF(bounds.X,
                                            bounds.Y + (bounds.Size.Height - rect.Size.Height),
                                            rect.Size.Width, rect.Size.Height);
                break;

            default:
                resultRect = bounds;
                break;
        }

        return resultRect;
    }
}

public enum UITextVerticalAlignment
{
    Top = 0, // default
    Middle,
    Bottom
}

3

Cara termudah dan termudah adalah dengan menyematkan Label di StackView dan mengatur Axis StackView ke Horizontal, Alignment to Top di Attribute Inspector dari Storyboard seperti yang ditunjukkan di sini .


2

Membangun di atas jawaban mengagumkan totiG, saya telah membuat kelas IBDesignable yang membuatnya sangat mudah untuk menyesuaikan perataan vertikal UILabel langsung dari StoryBoard. Pastikan Anda menyetel kelas UILabel Anda ke 'VerticalAlignLabel' dari inspektur identitas StoryBoard. Jika perataan vertikal tidak berpengaruh, buka Editor-> Segarkan Semua Tampilan yang seharusnya melakukan trik.

Cara kerjanya: Setelah Anda mengatur kelas UILabel Anda dengan benar, storyboard akan menampilkan bidang input yang mengambil integer (kode penyelarasan).

Pembaruan: Saya telah menambahkan dukungan untuk label terpusat ~ Sev


Masukkan 0 untuk Perataan Teratas

Masukkan 1 untuk Perataan Tengah

Masukkan 2 untuk Alignment Bawah

    @IBDesignable class VerticalAlignLabel: UILabel {
    
    @IBInspectable var alignmentCode: Int = 0 {
        didSet {
            applyAlignmentCode()
        }
    }
    
    func applyAlignmentCode() {
        switch alignmentCode {
        case 0:
            verticalAlignment = .top
        case 1:
            verticalAlignment = .topcenter
        case 2:
            verticalAlignment = .middle
        case 3:
            verticalAlignment = .bottom
        default:
            break
        }
    }
    
    override func awakeFromNib() {
        super.awakeFromNib()
        self.applyAlignmentCode()
    }
    
    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        
        self.applyAlignmentCode()
    }
    
    enum VerticalAlignment {
        case top
        case topcenter
        case middle
        case bottom
    }
    
    var verticalAlignment : VerticalAlignment = .top {
        didSet {
            setNeedsDisplay()
        }
    }
    
    override public func textRect(forBounds bounds: CGRect, limitedToNumberOfLines: Int) -> CGRect {
        let rect = super.textRect(forBounds: bounds, limitedToNumberOfLines: limitedToNumberOfLines)
        
        if #available(iOS 9.0, *) {
            if UIView.userInterfaceLayoutDirection(for: .unspecified) == .rightToLeft {
                switch verticalAlignment {
                case .top:
                    return CGRect(x: self.bounds.size.width - rect.size.width, y: bounds.origin.y, width: rect.size.width, height: rect.size.height)
                case .topcenter:
                    return CGRect(x: self.bounds.size.width - (rect.size.width / 2), y: bounds.origin.y, width: rect.size.width, height: rect.size.height)
                case .middle:
                    return CGRect(x: self.bounds.size.width - rect.size.width, y: bounds.origin.y + (bounds.size.height - rect.size.height) / 2, width: rect.size.width, height: rect.size.height)
                case .bottom:
                    return CGRect(x: self.bounds.size.width - rect.size.width, y: bounds.origin.y + (bounds.size.height - rect.size.height), width: rect.size.width, height: rect.size.height)
                }
            } else {
                switch verticalAlignment {
                case .top:
                    return CGRect(x: bounds.origin.x, y: bounds.origin.y, width: rect.size.width, height: rect.size.height)
                case .topcenter:
                    return CGRect(x: (self.bounds.size.width / 2 ) - (rect.size.width / 2), y: bounds.origin.y, width: rect.size.width, height: rect.size.height)
                case .middle:
                    return CGRect(x: bounds.origin.x, y: bounds.origin.y + (bounds.size.height - rect.size.height) / 2, width: rect.size.width, height: rect.size.height)
                case .bottom:
                    return CGRect(x: bounds.origin.x, y: bounds.origin.y + (bounds.size.height - rect.size.height), width: rect.size.width, height: rect.size.height)
                }
            }
        } else {
            // Fallback on earlier versions
            return rect
        }
    }
    
    override public func drawText(in rect: CGRect) {
        let r = self.textRect(forBounds: rect, limitedToNumberOfLines: self.numberOfLines)
        super.drawText(in: r)
    }
}


2

Anda juga dapat mengubah UILabel Anda menjadi UITextView, karena mereka pada dasarnya melakukan hal yang sama kecuali keuntungan dari UITextView adalah teks secara otomatis diratakan ke kiri atas


1

Saya memiliki masalah ini tetapi label saya ada di UITableViewCell, dan dengan dana itu cara termudah untuk menyelesaikan masalah adalah dengan membuat UIView kosong dan mengatur label di dalamnya dengan batasan ke atas dan ke sisi kiri saja, tanpa kutukan setel jumlah baris menjadi 0


0

Untuk iOS 7 itulah yang saya buat dan bekerja untuk saya

@implementation UILabel (VerticalAlign)
- (void)alignTop
{
    CGSize boundingRectSize = CGSizeMake(self.frame.size.width, CGFLOAT_MAX);
    NSDictionary *attributes = @{NSFontAttributeName : self.font};
    CGRect labelSize = [self.text boundingRectWithSize:boundingRectSize options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                                              attributes:attributes
                                                 context:nil];
    int numberOfLines= ceil(labelSize.size.height / self.font.lineHeight);

    CGRect newFrame = self.frame;
    newFrame.size.height = numberOfLines * self.font.lineHeight;
    self.frame = newFrame;
}

- (void)alignBottom
{
    CGSize boundingRectSize = CGSizeMake(self.frame.size.width, CGFLOAT_MAX);
    NSDictionary *attributes = @{NSFontAttributeName : self.font};
    CGRect labelSize = [self.text boundingRectWithSize:boundingRectSize options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                                            attributes:attributes
                                               context:nil];
    int numberOfLines= ceil(labelSize.size.height / self.font.lineHeight);

    int numberOfNewLined = (self.frame.size.height/self.font.lineHeight) - numberOfLines;

    NSMutableString *newLines = [NSMutableString string];
    for(int i=0; i< numberOfNewLined; i++){
        [newLines appendString:@"\n"];
    }
    [newLines appendString:self.text];
    self.text = [newLines mutableCopy];
}

0

Swift 2.0 :: Menggunakan Ekstensi UILabel

Buat nilai enum konstan dalam file Swift yang kosong.

//  AppRef.swift

import UIKit
import Foundation

enum UILabelTextPositions : String {

 case VERTICAL_ALIGNMENT_TOP = "VerticalAlignmentTop"
 case VERTICAL_ALIGNMENT_MIDDLE = "VerticalAlignmentMiddle"
 case VERTICAL_ALIGNMENT_BOTTOM = "VerticalAlignmentBottom"

}

Menggunakan Ekstensi UILabel:

Buat kelas Swift kosong dan beri nama. Tambahkan yang berikut ini.

//  AppExtensions.swift

import Foundation
import UIKit

    extension UILabel{ 
     func makeLabelTextPosition (sampleLabel :UILabel?, positionIdentifier : String) -> UILabel
     {
      let rect = sampleLabel!.textRectForBounds(bounds, limitedToNumberOfLines: 0)

      switch positionIdentifier
      {
      case "VerticalAlignmentTop":
       sampleLabel!.frame = CGRectMake(bounds.origin.x+5, bounds.origin.y, rect.size.width, rect.size.height)
       break;

      case "VerticalAlignmentMiddle":
       sampleLabel!.frame = CGRectMake(bounds.origin.x+5,bounds.origin.y + (bounds.size.height - rect.size.height) / 2,
        rect.size.width, rect.size.height);
       break;

      case "VerticalAlignmentBottom":
       sampleLabel!.frame = CGRectMake(bounds.origin.x+5, bounds.origin.y + (bounds.size.height - rect.size.height),rect.size.width, rect.size.height);
       break;

      default:
       sampleLabel!.frame = bounds;
       break;
      }
      return sampleLabel!

     }
    }

Penggunaan:

myMessageLabel.makeLabelTextPosition(messageLabel, positionIdentifier: UILabelTextPositions.VERTICAL_ALIGNMENT_TOP.rawValue)

Bisakah Anda menjelaskan apa yang dibutuhkan sampleLabel: UILabel??
Craig.Pearce

Pada func makeLabelTextPosition ini (sampleLabel: UILabel ?, positionIdentifier: String) {}, Anda harus meneruskan objek UILabel.
AG

0

Jawaban @ totiG versi Swift 3

class UIVerticalAlignLabel: UILabel {
    enum VerticalAlignment : Int {
        case VerticalAlignmentTop = 0
        case VerticalAlignmentMiddle = 1
        case VerticalAlignmentBottom = 2
    }

    @IBInspectable var verticalAlignment : VerticalAlignment = .VerticalAlignmentTop {
        didSet {
            setNeedsDisplay()
        }
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func textRect(forBounds bounds: CGRect, limitedToNumberOfLines: Int) -> CGRect {
        let rect = super.textRect(forBounds: bounds, limitedToNumberOfLines: limitedToNumberOfLines)

        switch(verticalAlignment) {
        case .VerticalAlignmentTop:
            return CGRect(x: bounds.origin.x, y: bounds.origin.y, width: rect.size.width, height: rect.size.height)
        case .VerticalAlignmentMiddle:
            return CGRect(x: bounds.origin.x, y: bounds.origin.y + (bounds.size.height - rect.size.height) / 2, width: rect.size.width, height: rect.size.height)
        case .VerticalAlignmentBottom:
            return CGRect(x: bounds.origin.x, y: bounds.origin.y + (bounds.size.height - rect.size.height), width: rect.size.width, height: rect.size.height)
        }
    }

    override func drawText(in rect: CGRect) {
        let r = self.textRect(forBounds: rect, limitedToNumberOfLines: self.numberOfLines)
        super.drawText(in: r)
    }
}

0

Jawaban @ totiG benar dan menyelesaikan masalah saya. Tetapi saya menemukan masalah saat menerapkan metode ini, di perangkat yang lebih kecil seperti 5s, SE, ini tidak berhasil untuk saya. Saya harus set label.sizeToFit()dioverride func layoutSubViews()

override func layoutSubViews() {
    super.layoutSubViews()
    // Do other works if needed
    label.sizeToFit()
}

0

Cepat 5

Sederhana saja, urutan properti adalah segalanya.

titleLabel.frame = CGRect(x: 20, y: 20, width: 374, height: 291.2)
titleLabel.backgroundColor = UIColor.clear //set a light color to see the frame
titleLabel.textAlignment = .left
titleLabel.lineBreakMode = .byTruncatingTail
titleLabel.numberOfLines = 4
titleLabel.font = UIFont(name: "HelveticaNeue-Bold", size: 35)
titleLabel.text = "Example"
titleLabel.sizeToFit()
self.view.addSubview(titleLabel)

-2

Bagaimana cara mengatur perataan kiri atas untuk UILabel untuk aplikasi iOS? Label Setel Mode Konten ke "Kiri Atas" berfungsi untuk saya, terima kasih banyak:
Bagaimana cara mengatur perataan kiri atas untuk UILabel untuk aplikasi iOS?  Label Setel Mode Konten ke "Kiri Atas" berfungsi untuk saya, terima kasih banyak


1
Tidak apa-apa untukku. Ini tampaknya secara intuitif seperti itu seharusnya menjadi solusi, itulah sebabnya saya beralih ke Google ketika tidak berhasil (atau tampaknya melakukan jack semua, dalam hal ini).
velkoon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.