Tuesday, July 12, 2011

nev-ertek megjelenitese UITableViewCell-ben

Kellett egy olyan UITableViewCell amiben nev-ertek parokat mutatok. Valamiert custom UITableViewCell-t csinaltam erre amibe tettem 2 UILabel-t ahelyett, hogy siman UITableViewCellStyleValue2-vel hoztam volna letre a cellakat. Most kijavitottam, de van par dolog amire itt is oda kell figyelni:

Az egyik dolog, hogy mivel a detailTextLabel-be esetleg tobb sornyi szoveg is kerulhet amit nem akarok trunc-olni ezert a cella magassagat be kell allitani (nem allitja magatol a device) valahogy igy:

- (CGFloat)tableView:(UITableView *)tableView_ heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGFloat kMinCellHeight = 44.0;
NSString *text = ZXGetPropertyValueForRow([indexPath row]);
CGSize textSize = CGSizeMake(tableView_.frame.size.width - 120.0, FLT_MAX);
CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:15.0f] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];
size.height += 25.0f;
return MAX(size.height, kMinCellHeight);
}

Azert hasznalom tableView.frame.size.width-120.0-at es nem a tobb helyen ajanlott 200.0f koruli ertekek valamelyiket, mert ez landscape modban is jo lesz. Ha a cella accessoryType-ja nem UITableViewCellAccessoryTypeNone hanem UITableViewCellAccessoryTypeDisclosureIndicator akkor inkabb -140.0-et kell hasznalni, mert a disclosureIndicator (>) elvesz 20 pixelt a detailTextView-tol. Ezek a 120.0-140.0-es ertekek csak hozzavetoleg jok. Azt meg nem sikerult kideriteni, hogy peldaul a Contacts App-ban ha felveszek egy tobb soros notes-ot akkor hogyan csinalja meg pontosan a cella magassagat. (Pedig ez lenne a lenyeg.)
A 25.0f-es ertek pedig ugy jott ki, hogy megneztem milyen magas a cella, ha nem varialok semmit es sorok_szama*19.0+25.0 jott ki azaz az egy soros ertekeknel 44.0f. Kivetel ez alol a Group-ok elso es utolso sora, ahol 45.0f-es a default magassag. (Csak Grouped Style-os UITableView-nal neztem ezeket az ertekeket.) Az elso es utolso sorok magassagat meg hiaba is allitottam 44.0-re, az minimum 45.0 lett.
A 15.0f-es meretet pedig a systemFontOfSize-nal pedig tobb helyen olvastam es probalgatassal nekem is ez jott ki.
Ahhoz persze, hogy tobb soros legyen a detailTextLabel meg be kellett allitani a numberOfLines-t 0-ra.


Egy masik problema volt, hogy a textLabel-be pont nem fert bele amit bele akartam irni. Eloszor azzal probalkoztam, hogy textLabel-en beallitom a betumeretet a setFont-tal ([[cell textLabel] setFont:[UIFont fontWithName:@"Helvetica-Bold" size:12]];), de nem akartam azokat megvaltoztatni amik a default font-tal is elfernenek.
Egy masik megoldas, hogy textLabel-re is beallitjuk a numberOfLines-t mondjuk 0-ra, de mivel a textLabel es a detailTextLabel betumerete nem ugyanakkora ezert ha mindketto 2 soros akkor a masodik soruk el van csuszva egymastol ami eleg benan nez ki.
Vegul azt valasztottam (ami nem tul hosszu szovegeknel mukodik), hogy a numberOfLines-t hagytam a default 1-en (ez fontos!) es beallitottam a minimumFontSize-ot (ami a textLabel-nel kb 12) 10-re. Igy ami elozoleg pont nem fert bele azt meg beleferthet es nem is lesz tul csunya. Ehhez be kell allitani az adjustFontSizeToFitWidth-et is true-ra.
[[cell textLabel] setAdjustsFontSizeToFitWidth:true];
[[cell textLabel] setMinimumFontSize:10.0];

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.