Állítsa UILabel magasság függvényében a szöveget

szavazat
289

Tekintsük azt az alábbi szöveget egy UILabel(hosszú sorában dinamikus szöveg):

Mivel az idegen hadsereg mérhetetlenül outnumbers a csapat, a játékosok kell használni a poszt-apokaliptikus világban, hogy saját javukra, így keresek mögé dumpsters, oszlopok, autók, törmelék, és egyéb tárgyak.

Azt szeretné méretezni a UILabel'smagasságát úgy, hogy a szöveg elfér. Én a következő tulajdonságait UILabel, hogy a szöveget, hogy lezárja.

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

Kérem, tudassa velem, ha nem vagyok cím a helyes irányba. Kösz.

A kérdést 15/01/2009 12:19
a forrás felhasználó
Más nyelveken...                            


34 válasz

szavazat
394

sizeWithFont constrainedToSize:lineBreakMode:a módszer használható. Egy példa arra, hogyan kell használni az alábbi:

//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;
Válaszolt 15/01/2009 16:01
a forrás felhasználó

szavazat
231

Úgy volt, a helyes irányba. Mindössze annyit kell tennie, hogy:

myUILabel.numberOfLines = 0;
myUILabel.text = @"Enter large amount of text here";
[myUILabel sizeToFit];
Válaszolt 20/08/2009 05:45
a forrás felhasználó

szavazat
41

Az iOS 6 Apple hozzáadott egy tulajdonságot UILabel hogy nagymértékben leegyszerűsíti dinamikus függőleges átméretezése címkék: preferredMaxLayoutWidth .

A tulajdonság kombinálva lineBreakMode = NSLineBreakByWordWrapping és sizeToFit eljárás lehetővé teszi, könnyen átméretezése UILabel például a magasság, hogy befogadja a teljes szöveget.

Egy idézet iOS dokumentáció:

preferredMaxLayoutWidth Az előnyös maximális szélessége (pont) egy többsoros címkét.

Megbeszélés Ez a tulajdonság befolyásolja a méret a címke, amikor elrendezés korlátok vonatkoztatható. Alatt elrendezés, ha a szöveg túlnyúlik a szélessége által meghatározott ingatlan, a további szöveg folyt egy vagy több új vonalak, ezzel is növelve a magassága a címkét.

Egy minta:

...
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];
...
Válaszolt 04/11/2013 22:14
a forrás felhasználó

szavazat
34

Ehelyett ezt programozottan, akkor ezt a forgatókönyvben / XIB tervezése során.

  • Állítsa UIlabel a sorok számát ingatlan 0 attribútum felügyelő.
  • Ezután állítsa szélessége korlát / (vagy) vezető és követő kényszer, mint egy a követelmény.
  • Ezután állítsa magasság korlát a legkisebb érték . Végül válassza ki a magasság korlát adta és a méret ellenőr az egyik mellett tulajdonítani ellenőr, módosítsa a magasság korlát a kapcsolatban honnan egyenlő - nagyobb, mint .
Válaszolt 18/06/2015 19:08
a forrás felhasználó

szavazat
28

Jelölje be ezt a munkát tökéletesen anélkül, hogy egyetlen sor kódot. (Használata Elrendezés)

Csináltam egy demo az Ön szerint a követelménynek. Töltse ki az alábbi linkre,

Autoresize UIView és UILabel

Step by Step Guide: -

1. lépés: - Set korlátozzák a UIView

1) Vezető 2) Top 3) Záró (ebből MAINVIEW)

írja kép leírása itt

2. lépés: - Állítsa a megkötés, hogy 1-es címke

1) Vezető 2) Top 3) Záró (ebből ez SuperView)

írja kép leírása itt

3. lépés: - Állítsa a megkötés, hogy 2-es címke

1) Vezető 2) záró (ebből ez SuperView)

írja kép leírása itt

4. lépés: - A legtöbb trükkös ad botton hogy UILabel származó UIView.

írja kép leírása itt

5. lépés: - (Opcionális) Állítsa korlátozzák a UIButton

1) Vezető 2) Alsó 3) Záró 4) fix magasságú (tól MAINVIEW)

írja kép leírása itt

Output: -

írja kép leírása itt

Megjegyzés: - Győződjön meg arról, hogy beállította a sorok száma = 0 Label tulajdon.

írja kép leírása itt

Remélem, hogy ez info ahhoz, hogy megértsük Autoresize UIView szerint UILabel magassága és Autoresize UILabel szerint szöveget.

Válaszolt 26/04/2016 10:52
a forrás felhasználó

szavazat
15

Köszi srácok a segítséget, itt a kód megpróbáltam ami nekem dolgozik

   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];
Válaszolt 23/11/2010 18:20
a forrás felhasználó

szavazat
12

Megoldás iOS7 előzetes és iOS7 felett

//
//  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
Válaszolt 24/02/2014 11:16
a forrás felhasználó

szavazat
10

Mivel sizeWithFont elavult én ezt egy helyett.

ez egy kap címke egyedi attribútumokat.

-(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);
}
Válaszolt 13/11/2014 23:40
a forrás felhasználó

szavazat
6

Itt van egy kategóriában verzió:

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
Válaszolt 10/04/2013 18:58
a forrás felhasználó

szavazat
6

Akkor végre TableViewController's (UITableViewCell *)tableView:cellForRowAtIndexPath módszer a következő módon (például):

#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;

Is használja NSString„s sizeWithFont:constrainedToSize:lineBreakMode:módszer, hogy kiszámolja a szöveg magasságát.

Válaszolt 15/01/2009 15:10
a forrás felhasználó

szavazat
4

A legegyszerűbb és jobb úgy működött, hogy nekem kellett alkalmazni magasság korlát a címkén és állítsa be a prioritás alacsony , azaz (250) a forgatókönyvbe.

Így nem kell aggódnia kiszámítása magasság és a szélesség programozottan köszönhetően storyboard.

Válaszolt 16/05/2016 16:43
a forrás felhasználó

szavazat
4

És azok számára, akik vándorolnak iOS 8, itt van egy osztály kiterjesztése Swift:

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)
        }
    }

}
Válaszolt 27/08/2014 10:18
a forrás felhasználó

szavazat
3

Frissítve eljárás

+ (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;
}
Válaszolt 06/07/2015 12:21
a forrás felhasználó

szavazat
2

Ez az egyik kódsort, hogy a UILabel Magasság Objective-c:

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

és használata .height kapsz a magasság címke az alábbiak szerint:

neededSize.height
Válaszolt 07/03/2017 13:22
a forrás felhasználó

szavazat
2

Ehhez a Swift3 következő a kódot:

 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)
Válaszolt 01/03/2017 13:27
a forrás felhasználó

szavazat
2

Swift 2:

    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()

Az érdekes vonalak sizeToFit()együtt beállításával frame.size.heighta max úszó, ez ad teret a hosszú szöveget, de sizeToFit()fogja kényszeríteni azt, hogy csak a szükséges, de mindig hívják beállítása után .frame.size.height.

Azt javasoljuk, hogy hozzon egy .backgroundColornyomkövetési célból, így láthatjuk a keret ne váljanak az egyes esetekben.

Válaszolt 26/11/2015 18:51
a forrás felhasználó

szavazat
2

Lehet használni, mint egy módszer is. @Pyjamasam nagyon is igaz, így én csak így módját. Lehet szolgálatkészen az valaki más

-(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;
}

és csak beállítani, mint ez

label.frame = [self setDynamicHeightForLabel:label andMaxWidth:300.0];
Válaszolt 20/01/2014 13:19
a forrás felhasználó

szavazat
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];

használja ezt itt minden tulajdonságát használják a címkén, és teszteld növeli a szöveg a itemTitle.text mint

itemTitle.text = @"diofgorigjveghnhkvjteinughntivugenvitugnvkejrfgnvkhv";

megmutatja a perfetc választ, amire szükség van

Válaszolt 27/06/2013 13:02
a forrás felhasználó

szavazat
2

Köszönöm ezt a bejegyzést. Ez segített sokat. Az én esetemben én is szerkeszti a szöveget egy külön nézetvezérlőben. Észrevettem, hogy ha használom:

[cell.contentView addSubview:cellLabel];

A Tableview: cellForRowAtIndexPath: módszer, amely a címke álláspontot folyamatosan nyújtott át a tetején a korábbi nézetet minden egyes alkalommal, szerkesztette a cellában. A szöveg lett pixeles, és ha valami törölték, vagy megváltozott, a korábbi verzió volt látható az új verzió. Itt van, hogyan oldotta meg a problémát:

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

Nincs több furcsa rétegződés. Ha van egy jobb módja annak, hogy kezelni ezt, Kérem, tudassa velem.

Válaszolt 20/02/2009 23:54
a forrás felhasználó

szavazat
1

UILabel kiterjesztés alapján ez a válasz a Swift 4 és újabb

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)
    }

}

Lehet használni, mint például:

self.labelHeightConstraint.constant = self.label.retrieveTextHeight()
Válaszolt 31/10/2017 13:00
a forrás felhasználó

szavazat
1

Hozzátéve, hogy a fenti válaszok:

Ez könnyen megvalósítható keresztül storyboard.

  1. Állítsa korlátot UILabel. (Az én esetemben én felső, bal és fix szélességű)
  2. Állítsa száma vonal 0 attribútum Inspector
  3. Állítsa Sortörés a wordwrap attribútum felügyelő.

UILabel magasság Állítsa

Válaszolt 18/10/2017 22:10
a forrás felhasználó

szavazat
1

Saját megközelítés, hogy kiszámolja a dinamikus magassága UILabel.

    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

Tekerjük a funkció:

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
}
Válaszolt 19/07/2017 06:02
a forrás felhasználó

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

Kérjük, állítsa korlátai UILable a storyboard, beleértve a bal felső a jobb alsó

Válaszolt 21/01/2017 09:07
a forrás felhasználó

szavazat
1

Ez a módszer segítségével tökéletes magasság

-(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;
}
Válaszolt 07/04/2016 14:00
a forrás felhasználó

szavazat
1

Saját kód:

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);
Válaszolt 08/06/2015 06:51
a forrás felhasználó

szavazat
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];
Válaszolt 29/04/2015 07:13
a forrás felhasználó

szavazat
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;    
}
Válaszolt 29/08/2012 08:29
a forrás felhasználó

szavazat
1

Az egyik vonal Chris válasz rossz.

newFrame.size.height = maximumLabelSize.height;

kellene

newFrame.size.height = expectedLabelSize.height;

Más, mint, hogy ez a helyes megoldás.

Válaszolt 21/05/2009 07:31
a forrás felhasználó

szavazat
1

Végül sikerült. Köszi srácok.

Én nem kapok, hogy működjön, mert akartam méretezni a címkére heightForRowAtIndexPathmódszer:

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

és (igen buta vagyok), én átméretezés a címkét az alapértelmezett a cellForRowAtIndexPathmódszer - én arra nyílik a kódot írtam korábban:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Válaszolt 16/01/2009 08:25
a forrás felhasználó

szavazat
0

Tudod kap magasságot az alábbi kódot

Meg kell adnod

  1. szöveg 2. font 3. címkeszélességet

    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
    }
    
Válaszolt 12/04/2018 10:43
a forrás felhasználó

szavazat
0

A probléma az, hogy egyik említett funkciók realiable és néhány húr és a betűtípus visszatér helytelen magasság értékét. Különösen akkor nem, a másoktól szövegeket.

Az egyetlen realiable megoldás itt van: https://stackoverflow.com/a/4214978/699944 és a lényeg az, hogy az CoreText manuális magasság kiszámítása minden sorban, hogy a megfelelő méretű. Nincs más ismert módja ennek.

Válaszolt 28/01/2014 09:55
a forrás felhasználó

szavazat
0

Ez a módszer működik mind iOS 6 és 7

- (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;
}

}
Válaszolt 17/01/2014 15:55
a forrás felhasználó

szavazat
-1

Amikor Elrendezés engedélyezett az átméretezés nem működik :)

Válaszolt 09/10/2013 03:07
a forrás felhasználó

szavazat
-2

Frissítés szerint iOS7

// 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;
Válaszolt 13/11/2013 08:51
a forrás felhasználó

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