metine göre UILabel yüksekliği ayarlayın

oy
289

Ben aşağıdaki metni var düşünün UILabel(dinamik metnin uzun bir hat):

yabancı ordu ölçüde takımı outnumbers yana, oyuncular böyle dumpsters, sütunlar, araba, moloz ve diğer nesnelerin arkasında siper arayan olarak, kendi lehlerine kıyamet sonrası dünyayı kullanmalıdır.

Ben boyutlandırmak istediğiniz UILabel'smetni sığabilecek şekilde. Ben aşağıdaki özelliklerini kullanıyorum yüksekliğini UILabelsarmak için içindeki metni yapmak.

myUILabel.lineBreakMode = UILineBreakModeWordWrap;
myUILabel.numberOfLines = 0;

Ben doğru yönde ilerliyor değilim varsa bana bildirin. Teşekkürler.

Oluştur 15/01/2009 saat 12:19
kaynak kullanıcı
Diğer dillerde...                            


34 cevaplar

oy
394

sizeWithFont constrainedToSize:lineBreakMode:kullanmak için bir yöntemdir. nasıl kullanılacağını örneği aşağıdadır:

//Calculate the expected size based on the font and linebreak mode of your label
// FLT_MAX here simply means no constraint in height
CGSize maximumLabelSize = CGSizeMake(296, FLT_MAX);

CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode];   

//adjust the label the the new height.
CGRect newFrame = yourLabel.frame;
newFrame.size.height = expectedLabelSize.height;
yourLabel.frame = newFrame;
Cevap 15/01/2009 saat 16:01
kaynak kullanıcı

oy
231

Sen doğru yönde gidiyorduk. Tek yapmanız gereken:

myUILabel.numberOfLines = 0;
myUILabel.text = @"Enter large amount of text here";
[myUILabel sizeToFit];
Cevap 20/08/2009 saat 05:45
kaynak kullanıcı

oy
41

IOS 6'da Elma Bir mülkü ekledi UILabel : büyük ölçüde etiketlerin dinamik dikey boyutlandırma kolaylaştırır preferredMaxLayoutWidth .

Birlikte bu özelliği kullanarak lineBreakMode = NSLineBreakByWordWrapping ve sizeToFit yöntemiyle kolayca tüm metnini barındırır yüksekliğe bir UILabel örneğini yeniden boyutlandırmak sağlar.

iOS belgelerine gelen bir alıntı:

preferredMaxLayoutWidth if bir çoklu-hatlı etiketi (puan olarak) maksimum genişliği tercih edilir.

Tartışma düzeni kısıtlamaları kendisine uygulandığında bu özellik etiketin boyutunu etkiler. Metni bu özelliği tarafından belirtilen genişliğe dışına taşırsa düzeni sırasında, ek metin ve böylece etiketin yüksekliğini arttırarak, bir veya daha fazla yeni hatlara akıtılır.

Bir örnek:

...
UILabel *status = [[UILabel alloc] init];
status.lineBreakMode = NSLineBreakByWordWrapping;
status.numberOfLines = 5; // limits to 5 lines; use 0 for unlimited.

[self addSubview:status]; // self here is the parent view

status.preferredMaxLayoutWidth = self.frame.size.width; // assumes the parent view has its frame already set.

status.text = @"Some quite lengthy message may go here…";
[status sizeToFit];
[status setNeedsDisplay];
...
Cevap 04/11/2013 saat 22:14
kaynak kullanıcı

oy
34

programlı bunu yerine tasarlarken, sen Storyboard / XIB'nin yapabilirsiniz.

  • UILabel en Set hatlar sayısını mülk 0 nitelik denetiminde.
  • Daha sonra şartının genişliği kısıtlama / (ya da) ön ve arka kısıtlaması ayarlayın.
  • Ardından yükseklik sınırlaması ayarlayabilirsiniz ile minimum değer . Son olarak eklenen yükseklik sınırlaması seçmek ve boyut denetiminde bir sonraki, müfettiş atfetme değiştirmek yükseklik kısıtlaması en ilişkisini gelen eşit - daha büyüktür .
Cevap 18/06/2015 saat 19:08
kaynak kullanıcı

oy
28

kod Tek satır eklemeden mükemmel bu işi kontrol edin. (AutoLayout kullanarak)

Ben yapılan demo sizin ihtiyacına göre sizin için. Aşağıdaki linkten indirin,

Autoresize UIView ve UILabel

Adım adım rehber :-

Adım 1: - Set UIView sınırlamak

1) Lider Firar 2) İlk 3) (Mainview itibaren)

Burada görüntü açıklama girin

Adım 2: - Set constrain 1 Etiket için

1) Lider Firar 2) İlk 3) (o Superview var Gönderen)

Burada görüntü açıklama girin

3. Adım: - Set constrain 2 Etiket için

1) 2) gerisinde (Öncü o Superview var Gönderen)

Burada görüntü açıklama girin

Adım 4: - En zor UIView gelen UILabel için vermek Botton.

Burada görüntü açıklama girin

Adım 5: - UIButton için sınırlamak (İsteğe bağlı) Seti

1)) Mainview kaynaktan 2) Alt 3) Çekme 4) sabit bir yükseklikte (Öncü

Burada görüntü açıklama girin

Çıktı :-

Burada görüntü açıklama girin

Not: - Etiket özelliğinde hatlarının sayısı = 0 set emin olun.

Burada görüntü açıklama girin

Ben UILabel boyu ve Autoresize UILabel metnine göre göre Autoresize UIView anlayacak kadar bu bilgiyi umuyoruz.

Cevap 26/04/2016 saat 10:52
kaynak kullanıcı

oy
15

Yardım için teşekkürler çocuklar, buraya benim için çalışıyor denedim kodudur

   UILabel *instructions = [[UILabel alloc]initWithFrame:CGRectMake(10, 225, 300, 180)];
   NSString *text = @"First take clear picture and then try to zoom in to fit the ";
   instructions.text = text;
   instructions.textAlignment = UITextAlignmentCenter;
   instructions.lineBreakMode = NSLineBreakByWordWrapping;
   [instructions setTextColor:[UIColor grayColor]];

   CGSize expectedLabelSize = [text sizeWithFont:instructions.font 
                                constrainedToSize:instructions.frame.size
                                    lineBreakMode:UILineBreakModeWordWrap];

    CGRect newFrame = instructions.frame;
    newFrame.size.height = expectedLabelSize.height;
    instructions.frame = newFrame;
    instructions.numberOfLines = 0;
    [instructions sizeToFit];
    [self addSubview:instructions];
Cevap 23/11/2010 saat 18:20
kaynak kullanıcı

oy
12

Yukarıdaki iOS7 öncesinde ve -iOS7 için Çözüm

//
//  UILabel+DynamicHeight.m
//  For StackOverFlow
//
//  Created by Vijay on 24/02/14.
//  Copyright (c) 2014 http://Vijay-Apple-Dev.blogspot.com. All rights reserved.
//

#import <UIKit/UIKit.h>

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

#define iOS7_0 @"7.0"

@interface UILabel (DynamicHeight)

/*====================================================================*/

/* Calculate the size,bounds,frame of the Multi line Label */

/*====================================================================*/
/**
 *  Returns the size of the Label
 *
 *  @param aLabel To be used to calculte the height
 *
 *  @return size of the Label
 */

-(CGSize)sizeOfMultiLineLabel;

@end


//
//  UILabel+DynamicHeight.m
//  For StackOverFlow
//
//  Created by Vijay on 24/02/14.
//  Copyright (c) 2014 http://Vijay-Apple-Dev.blogspot.com. All rights reserved.
//

#import "UILabel+DynamicHeight.h"

@implementation UILabel (DynamicHeight)
/*====================================================================*/

/* Calculate the size,bounds,frame of the Multi line Label */

/*====================================================================*/
/**
 *  Returns the size of the Label
 *
 *  @param aLabel To be used to calculte the height
 *
 *  @return size of the Label
 */
-(CGSize)sizeOfMultiLineLabel{

    NSAssert(self, @"UILabel was nil");

    //Label text
    NSString *aLabelTextString = [self text];

    //Label font
    UIFont *aLabelFont = [self font];

    //Width of the Label
    CGFloat aLabelSizeWidth = self.frame.size.width;


    if (SYSTEM_VERSION_LESS_THAN(iOS7_0)) {
        //version < 7.0

        return [aLabelTextString sizeWithFont:aLabelFont
                            constrainedToSize:CGSizeMake(aLabelSizeWidth, MAXFLOAT)
                                lineBreakMode:NSLineBreakByWordWrapping];
    }
    else if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(iOS7_0)) {
        //version >= 7.0

        //Return the calculated size of the Label
        return [aLabelTextString boundingRectWithSize:CGSizeMake(aLabelSizeWidth, MAXFLOAT)
                                              options:NSStringDrawingUsesLineFragmentOrigin
                                           attributes:@{
                                                        NSFontAttributeName : aLabelFont
                                                        }
                                              context:nil].size;

    }

    return [self bounds].size;

}

@end
Cevap 24/02/2014 saat 11:16
kaynak kullanıcı

oy
10

sizeWithFont kullanımdan kaldırılmıştır beri yerine bunu kullanın.

bu bir etiket belirli özellikler olsun.

-(CGFloat)heightForLabel:(UILabel *)label withText:(NSString *)text{

    NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName:label.font}];
    CGRect rect = [attributedText boundingRectWithSize:(CGSize){label.frame.size.width, CGFLOAT_MAX}
                                           options:NSStringDrawingUsesLineFragmentOrigin
                                           context:nil];

    return ceil(rect.size.height);
}
Cevap 13/11/2014 saat 23:40
kaynak kullanıcı

oy
6

İşte kategori sürümü:

UILabel + AutoSize.h #import

@interface UILabel (AutoSize)

- (void) autosizeForWidth: (int) width;

@end

UILabel + AutoSize.m

#import "UILabel+AutoSize.h"

@implementation UILabel (AutoSize)

- (void) autosizeForWidth: (int) width {
    self.lineBreakMode = UILineBreakModeWordWrap;
    self.numberOfLines = 0;
    CGSize maximumLabelSize = CGSizeMake(width, FLT_MAX);
    CGSize expectedLabelSize = [self.text sizeWithFont:self.font constrainedToSize:maximumLabelSize lineBreakMode:self.lineBreakMode];
    CGRect newFrame = self.frame;
    newFrame.size.height = expectedLabelSize.height;
    self.frame = newFrame;
}

@end
Cevap 10/04/2013 saat 18:58
kaynak kullanıcı

oy
6

Sen uygulayabilirsiniz TableViewController's (UITableViewCell *)tableView:cellForRowAtIndexPath (örneğin) aşağıdaki şekilde yöntemini:

#define CELL_LABEL_TAG 1

- (UITableViewCell *)tableView:(UITableView *)tableView  cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *text = @"my long text";

    static NSString *MyIdentifier = @"MyIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero  reuseIdentifier:identifier] autorelease];
    }

    CGFloat width = [UIScreen mainScreen].bounds.size.width - 50;
    CGFloat height = [self textHeight:text] + 10;
    CGRect frame = CGRectMake(10.0f, 10.0f, width, height);

    UILabel *cellLabel = [[UILabel alloc] initWithFrame:frame];
    cellLabel.tag = CELL_LABEL_TAG;
    cellLabel.textColor = [UIColor blackColor];
    cellLabel.backgroundColor = [UIColor clearColor];
    cellLabel.textAlignment = UITextAlignmentLeft;
    cellLabel.font = [UIFont systemFontOfSize:12.0f];
    [cell.contentView addSubview:cellLabel];
    [cellLabel release];

    return cell;
}

UILabel *label = (UILabel *)[cell viewWithTag:CELL_LABEL_TAG];
label.text = text;
label.numberOfLines = 0;
[label sizeToFit];
return cell;

Ayrıca kullanmak NSString'ın sizeWithFont:constrainedToSize:lineBreakMode:metnin yüksekliğini hesaplamak için bir yöntem.

Cevap 15/01/2009 saat 15:10
kaynak kullanıcı

oy
4

Benim için çalıştı kolay ve daha iyi bir yol etiketlemek için yükseklik sınırlaması uygulamak oldu ve set düşük öncelik yani (250) Film şeridinde,.

Yani film şeridine sayesinde yükseklik hesaplama dert ve programlı genişliği gerek yoktur.

Cevap 16/05/2016 saat 16:43
kaynak kullanıcı

oy
4

Ve iOS 8 göç olanlar için, buraya Swift için bir sınıf uzantısıdır:

extension UILabel {

    func autoresize() {
        if let textNSString: NSString = self.text {
            let rect = textNSString.boundingRectWithSize(CGSizeMake(self.frame.size.width, CGFloat.max),
                options: NSStringDrawingOptions.UsesLineFragmentOrigin,
                attributes: [NSFontAttributeName: self.font],
                context: nil)
            self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, rect.height)
        }
    }

}
Cevap 27/08/2014 saat 10:18
kaynak kullanıcı

oy
3

Güncelleme Yöntemi

+ (CGFloat)heightForText:(NSString*)text font:(UIFont*)font withinWidth:(CGFloat)width {

    CGSize constraint = CGSizeMake(width, 20000.0f);
    CGSize size;

    CGSize boundingBox = [text boundingRectWithSize:constraint
                                                  options:NSStringDrawingUsesLineFragmentOrigin
                                               attributes:@{NSFontAttributeName:font}
                                                  context:nil].size;

    size = CGSizeMake(ceil(boundingBox.width), ceil(boundingBox.height));

    return size.height;
}
Cevap 06/07/2015 saat 12:21
kaynak kullanıcı

oy
2

Bu Objective-c kullanarak UILabel Yükseklik almak için bir kod satırı:

labelObj.numberOfLines = 0;
CGSize neededSize = [labelObj sizeThatFits:CGSizeMake(screenWidth, CGFLOAT_MAX)];

ve aşağıdaki gibi etiket yüksekliğini alacak .height kullanarak:

neededSize.height
Cevap 07/03/2017 saat 13:22
kaynak kullanıcı

oy
2

Aşağıdaki swift3 bunu yapmak için kod şudur:

 let labelSizeWithFixedWith = CGSize(width: 300, height: CGFloat.greatestFiniteMagnitude)
            let exactLabelsize = self.label.sizeThatFits(labelSizeWithFixedWith)
            self.label.frame = CGRect(origin: CGPoint(x: 20, y: 20), size: exactLabelsize)
Cevap 01/03/2017 saat 13:27
kaynak kullanıcı

oy
2

2 Swift:

    yourLabel.text = "your very long text"
    yourLabel.numberOfLines = 0
    yourLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
    yourLabel.frame.size.width = 200
    yourLabel.frame.size.height = CGFloat(MAXFLOAT)
    yourLabel.sizeToFit()

Ilginç çizgilerdir sizeToFit()bir ayar ile birlikte frame.size.heightmaksimum şamandıraya, bu uzun metnin yer verir, ama sizeToFit()sadece gerekli kullanmaya zorlar, ancak her zaman ayarladıktan sonra diyoruz .frame.size.height.

Bir ayarlamanızı öneririz .backgroundColorayıklama amacıyla, çerçeveyi görebilirsiniz bu şekilde her durum için yitirebilir.

Cevap 26/11/2015 saat 18:51
kaynak kullanıcı

oy
2

Siz de bir yöntem olarak kullanabilir. Ben sadece onun yöntemini yapıyorum böylece @Pyjamasam çok doğrudur. Bu bazı kimse için yararlı olabilir

-(CGRect)setDynamicHeightForLabel:(UILabel*)_lbl andMaxWidth:(float)_width{
    CGSize maximumLabelSize = CGSizeMake(_width, FLT_MAX);

    CGSize expectedLabelSize = [_lbl.text sizeWithFont:_lbl.font constrainedToSize:maximumLabelSize lineBreakMode:_lbl.lineBreakMode];

    //adjust the label the the new height.
    CGRect newFrame = _lbl.frame;
    newFrame.size.height = expectedLabelSize.height;
    return newFrame;
}

ve bunun gibi ayarlayın

label.frame = [self setDynamicHeightForLabel:label andMaxWidth:300.0];
Cevap 20/01/2014 saat 13:19
kaynak kullanıcı

oy
2
UILabel *itemTitle = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 10,100, 200.0f)];
itemTitle.text = @"aseruy56uiytitfesh";
itemTitle.adjustsFontSizeToFitWidth = NO;
itemTitle.autoresizingMask = UIViewAutoresizingFlexibleWidth;
itemTitle.font = [UIFont boldSystemFontOfSize:18.0];
itemTitle.textColor = [UIColor blackColor];
itemTitle.shadowColor = [UIColor whiteColor];
itemTitle.shadowOffset = CGSizeMake(0, 1);
itemTitle.backgroundColor = [UIColor blueColor];
itemTitle.lineBreakMode = UILineBreakModeWordWrap;
itemTitle.numberOfLines = 0;
[itemTitle sizeToFit];
[self.view addSubview:itemTitle];

Burada bu kullanan tüm özellikleri etikette kullanılan ve aynı itemTitle.text metni artırarak test

itemTitle.text = @"diofgorigjveghnhkvjteinughntivugenvitugnvkejrfgnvkhv";

İhtiyacınız gibi perfetc yanıtını gösterir

Cevap 27/06/2013 saat 13:02
kaynak kullanıcı

oy
2

Bu yazı için teşekkürler. Bana çok yardımcı oldu. Benim durumumda ben de ayrı bir görünüm denetleyicisi metin düzenlerken ediyorum. Ben kullandığınızda fark:

[cell.contentView addSubview:cellLabel];

cellForRowAtIndexPath: tableView içinde yöntemle etiket görünümü sürekli Önceki görünüme üstünden ben hücreyi düzenlenebilir her seferinde hale getirildi söyledi. Metin pikselli oldu ve bir şey silinmiş veya değiştirilmiş zaman, önceki sürümü yeni sürümü altında görülebiliyordu. İşte problemi nasıl çözdüğünü var:

if ([[cell.contentView subviews] count] > 0) {
    UIView *test = [[cell.contentView subviews] objectAtIndex:0];
    [test removeFromSuperview];
}
[cell.contentView insertSubview:cellLabel atIndex:0];

Artık garip katman. Bu işlemek için daha iyi bir yolu varsa, lütfen bize bildirin.

Cevap 20/02/2009 saat 23:54
kaynak kullanıcı

oy
1

Dayalı UILabel uzantısı bu cevap için yukarıda Swift 4 ve

extension UILabel {

    func retrieveTextHeight () -> CGFloat {
        let attributedText = NSAttributedString(string: self.text!, attributes: [NSFontAttributeName:self.font])

        let rect = attributedText.boundingRect(with: CGSize(width: self.frame.size.width, height: CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, context: nil)

        return ceil(rect.size.height)
    }

}

gibi kullanılabilir:

self.labelHeightConstraint.constant = self.label.retrieveTextHeight()
Cevap 31/10/2017 saat 13:00
kaynak kullanıcı

oy
1

Yukarıdaki cevaplara ekleme:

Bu kolayca film şeridi ile elde edilebilir.

  1. UILabel ilişkin sınırlamayı ayarlayın. (Benim durumumda ben üst, sol ve genişliği sabit vermedi)
  2. Set 0'a hattın sayısı Özellik Inspector'da
  3. Set wordWrap için Satır Sonu Özellik Inspector'da.

UILabel Yükseklik ayarlama

Cevap 18/10/2017 saat 22:10
kaynak kullanıcı

oy
1

Benim yaklaşımım UILabel dinamik yüksekliğini hesaplamak için.

    let width = ... //< width of this label 
    let text = ... //< display content

    label.numberOfLines = 0
    label.lineBreakMode = .byWordWrapping
    label.preferredMaxLayoutWidth = width

    // Font of this label.
    //label.font = UIFont.systemFont(ofSize: 17.0)
    // Compute intrinsicContentSize based on font, and preferredMaxLayoutWidth
    label.invalidateIntrinsicContentSize() 
    // Destination height
    let height = label.intrinsicContentSize.height

işlevine sarın:

func computeHeight(text: String, width: CGFloat) -> CGFloat {
    // A dummy label in order to compute dynamic height.
    let label = UILabel()

    label.numberOfLines = 0
    label.lineBreakMode = .byWordWrapping
    label.font = UIFont.systemFont(ofSize: 17.0)

    label.preferredMaxLayoutWidth = width
    label.text = text
    label.invalidateIntrinsicContentSize()

    let height = label.intrinsicContentSize.height
    return height
}
Cevap 19/07/2017 saat 06:02
kaynak kullanıcı

oy
1
myLabel.text = "your very long text"
myLabel.numberOfLines = 0
myLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping

Üst sol sağ alt dahil Film şeridinde UILable için sınırlamalar ayarlayabilirsiniz Lütfen

Cevap 21/01/2017 saat 09:07
kaynak kullanıcı

oy
1

Bu yöntem mükemmel yüksekliğini verecektir

-(float) getHeightForText:(NSString*) text withFont:(UIFont*) font andWidth:(float) width{
CGSize constraint = CGSizeMake(width , 20000.0f);
CGSize title_size;
float totalHeight;


title_size = [text boundingRectWithSize:constraint
                                options:NSStringDrawingUsesLineFragmentOrigin
                             attributes:@{ NSFontAttributeName : font }
                                context:nil].size;

totalHeight = ceil(title_size.height);

CGFloat height = MAX(totalHeight, 40.0f);
return height;
}
Cevap 07/04/2016 saat 14:00
kaynak kullanıcı

oy
1

Kodum:

UILabel *label      = [[UILabel alloc] init];
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
label.text          = text;
label.textAlignment = NSTextAlignmentCenter;
label.font          = [UIFont fontWithName:_bodyTextFontFamily size:_bodyFontSize];

CGSize size = [label sizeThatFits:CGSizeMake(width, MAXFLOAT)];


float height        = size.height;
label.frame         = CGRectMake(x, y, width, height);
Cevap 08/06/2015 saat 06:51
kaynak kullanıcı

oy
1
NSString *str = @"Please enter your text......";
CGSize lblSize = [str sizeWithFont:[UIFont systemFontOfSize:15] constrainedToSize: CGSizeMake(200.0f, 600.0f) lineBreakMode: NSLineBreakByWordWrapping];

UILabel *label = [[UILabel alloc]init];
label.frame = CGRectMake(60, 20, 200, lblSize.height);
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
label.font = [UIFont systemFontOfSize:15];
label.text = str;
label.backgroundColor = [UIColor clearColor];
[label sizeToFit];
[self.view addSubview:label];
Cevap 29/04/2015 saat 07:13
kaynak kullanıcı

oy
1
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    cellIdentifier = @"myCell";
    cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    cell.myUILabel.lineBreakMode = UILineBreakModeWordWrap;        
    cell.myUILabel.numberOfLines = 0;
    cell.myUILabel.text = @"Some very very very very long text....."
    [cell.myUILabel.criterionDescriptionLabel sizeToFit];    
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
    CGFloat rowHeight = cell.myUILabel.frame.size.height + 10;

    return rowHeight;    
}
Cevap 29/08/2012 saat 08:29
kaynak kullanıcı

oy
1

Bir satır Chris'in cevap yanlış olduğunu.

newFrame.size.height = maximumLabelSize.height;

olmalı

newFrame.size.height = expectedLabelSize.height;

Bunun dışında, doğru bir çözüm.

Cevap 21/05/2009 saat 07:31
kaynak kullanıcı

oy
1

Son olarak, işe yaradı. Sağolun beyler.

Ben Etiketi yeniden boyutlandırmak çalışıyordu çünkü çalışması için alma değildi heightForRowAtIndexPathyöntemle:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

ve (evet bana saçma) i Varsayılana etiketi boyutlandırma edildi cellForRowAtIndexPathyönteme - i daha önce yazmıştı kodu bakan oldu:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Cevap 16/01/2009 saat 08:25
kaynak kullanıcı

oy
0

Sen kodunun altına kullanarak yüksekliği elde edebilirsiniz

Sen geçmek zorunda

  1. metin 2. tipi 3. Etiket genişliği

    func heightForLabel(text: String, font: UIFont, width: CGFloat) -> CGFloat {
    
    let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: CGFloat.greatestFiniteMagnitude))
    label.numberOfLines = 0
    label.lineBreakMode = NSLineBreakMode.byWordWrapping
    label.font = font
    label.text = text
    label.sizeToFit()
    
    return label.frame.height
    }
    
Cevap 12/04/2018 saat 10:43
kaynak kullanıcı

oy
0

Sorun söz fonksiyonların hiçbiri realiable ve bazı dize ve yanlış yükseklik değerini döndürecektir yazı tipi için olmasıdır. Özellikle atfedilen metinler için başarısız olur.

Sadece realiable çözüm burada: https://stackoverflow.com/a/4214978/699944 ve nokta elle sağ boyutunu almak için her satırın yüksekliğini hesaplamak için CoreText kullanmaktır. Bunu yapmak için başka bilinen bir yolu yoktur.

Cevap 28/01/2014 saat 09:55
kaynak kullanıcı

oy
0

Bu yöntem, IOS 6 ve 7 için çalışacak

- (float)heightForLabelSize:(CGSize)maximumLabelSize  Font:(UIFont *)font String:(NSString*)string {

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    NSDictionary *stringAttributes = [NSDictionary dictionaryWithObject:font forKey: NSFontAttributeName];

    CGSize adjustedLabelSize = [string maximumLabelSize
                                                                  options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin
                                                               attributes:stringAttributes context:nil].size;
    return adjustedLabelSize.height;
}
else {
    CGSize adjustedLabelSize = [string sizeWithFont:font constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByWordWrapping];

    return adjustedLabelSize.height;
}

}
Cevap 17/01/2014 saat 15:55
kaynak kullanıcı

oy
-1

autoLayout etkinleştirildiğinde yeniden boyutlandırma çalışmıyor :)

Cevap 09/10/2013 saat 03:07
kaynak kullanıcı

oy
-2

-iOS7 göre Güncellemeler

// If description are available for protocol
protocolDescriptionLabel.text = [dataDictionary objectForKey:@"description"];
[protocolDescriptionLabel sizeToFit];
[protocolDescriptionLabel setLineBreakMode:NSLineBreakByWordWrapping];

CGSize expectedLabelSize = [protocolDescriptionLabel
               textRectForBounds:protocolDescriptionLabel.frame
               limitedToNumberOfLines:protocolDescriptionLabel.numberOfLines].size;
NSLog(@"expectedLabelSize %f", expectedLabelSize.height);

//adjust the label the the new height.
CGRect newFrame = protocolDescriptionLabel.frame;
newFrame.size.height = expectedLabelSize.height;
protocolDescriptionLabel.frame = newFrame;
Cevap 13/11/2013 saat 08:51
kaynak kullanıcı

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