iCulture forum | iPhone, iPad,  iPod touch, Apple TV en iOS

iCulture forum | iPhone, iPad, iPod touch, Apple TV en iOS (https://forum.iculture.nl/)
-   Ontwikkelen voor iOS (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/)
-   -   Automatische cell lengte (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/146731-automatische-cell-lengte.html)

Dreissen 24-10-13 21:05

Automatische cell lengte
 
Hallo,

Ik ben op dit moment aan het stoeien met de "UITableViews", dit gaat redelijk goed alleen ik loop tegen een (klein) probleem aan.
Ik krijgt het niet voor elkaar om de cell lengte automatisch te veranderen op basis van de hoeveelheid tekst in de "detailTextLabel".

Hieronder een screenshot:
http://puu.sh/4YrVJ/9aea5e995d.png

Code:
Code:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellText    = [titleArray objectAtIndex:indexPath.row];
    UIFont *cellFont      = [UIFont systemFontOfSize:10];
    CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
    CGSize labelSize      = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];
    return labelSize.height + 40;
}

Bedankt voor de hulp alvast!

Nikooos 25-10-13 10:52

Code:

- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    PFObject *messageObject = [self.chatArray objectAtIndex:indexPath.row];
    NSString *message = [messageObject objectForKey:@"message"];
   
    CGFloat constrainedSize = 280.0;
    UIFont *myFont = [UIFont fontWithName:@"HelveticaNeue-Medium" size:16];
    CGSize textSize = [message sizeWithFont: myFont
                        constrainedToSize:CGSizeMake(constrainedSize, CGFLOAT_MAX)
                            lineBreakMode:NSLineBreakByWordWrapping];
   
    float totalHeight = textSize.height+30.0;
   
    return totalHeight;
}

Een voorbeeld bij mij die wel werkt. Lijkt vrijwel hetzelfde eigenlijk.

wubbe 25-10-13 14:25

Zoek de verschillen
 
Ik heb ook nog even nauwkeurig zitten kijken, maar ik kan geen wezenlijke verschillen tussen de twee scripts ontdekken.
Dat is het dus niet.

Ik kan mij wel herinneren dat ik ook eens heb zitten klooien om de methode heightForRowAtIndexPath te laten werken.

Heb je al eens verschillende getallen voor de hoogte ingevuld, en is de rijhoogte dan ook anders? Ik vermoed namelijk dat het niet aan jouw scriptje ligt.

Whacko 25-10-13 15:25

het enige echte verschil dat ik zie is dat nikoos het volgende doet:

float totalHeight = textSize.height+30.0; return totalHeight;en Dreissen:
return labelSize.height + 40;

dat zou geen verschil MOGEN maken, maar de height property is readonly, dus misschien dat daar iets misgaat, dus probeer het eens met een variable te returnen.

Dreissen 25-10-13 20:59

Vraag me niet waarom en hoe, maar inderdaad Whacko, jij had gelijk.

Laatste lijn (van mijn code) vervangen door dit:
Code:

float totalHeight = labelSize.height + 45;
return totalHeight;

Werkt perfect nu! Bedankt voor de hulp! :D

Dreissen 26-10-13 02:00

Heb nog een vraag betreft UITableViews.
In een UITableView laat de ik de laatste Twitter berichten zien, dit gaat allemaal prima. Nu wil ik graag met meerdere tekstgroottes werken in een label.

Dit is wat ik tot nu toe heb:
Code:

NSString *nameString = [NSString stringWithFormat:@"%@ @%@", twitterName, twitterScreenName];
NSMutableAttributedString *attributedNameString = [[NSMutableAttributedString alloc]  initWithString:nameString];
[attributedNameString addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:10]range:NSMakeRange([twitterName length],[nameString length])];
cell.textLabel.attributedText = attributedNameString;

nameString = Dreissen @dreissen
twitterName = Dreissen
twitterScreenName = @dreissen

Wat ik graag wil is het stuk tekst vanaf de @ een kleiner lettertype geven.
Krijgt nu een SIGABRT error.

rsluman 22-11-13 16:52

Wellicht heb je dit al opgelost, maar zo niet: is dit niet de oplossing?

Code:

[attributedNameString addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:10]range:NSMakeRange([twitterName length],[twitterScreenName length])];
Anders wordt je range te lang (de lengte van *nameString, terwijl je natuurlijk de lengte van *twitterScreenName wilt hebben)...


Alle tijden zijn GMT +2. Het is nu 03:45.