Subject: [BUG?] - [NSLayoutManager
usedRectForTextContainer:] returns incorrect value


I'm seeing incorrect results when I try to get the height of a string with a particular font and maximum width.


I'm running the code below. I have a single NSWindow with a checkbox and a button. In the awakeFromNib method of the main controller, I change the attribute of the checkbox string. In the compute: method, I compute the height requested to display a string for a specific font and maximum width.

If I run this code as is, I get 17.0 as the required height. That's incorrect.

If I comment the awakeFromNib code, I get 34.0f as the required height. That's correct.


Is it a bug in NSLayoutManager?

If so, is there a workaround?

If it's not, what am I missing?

-----8<---------8<--------8<--------8<--------8<--------8<--------8<---- ----

#import "MainController.h"

@implementation MainController

- (void) awakeFromNib
NSAttributedString * tAttributedString;

tAttributedString=[[NSAttributedString alloc] initWithString: [IBcheckBox_ title] attributes:[NSDictionary dictionaryWithObjectsAndKeys:[IBcheckBox_ font],NSFontAttributeName,
[NSNumber numberWithInt:NSUnderlineStyleSingle],NSStrikethroughStyleAttributeName, nil]];

if (tAttributedString!=nil)
[IBcheckBox_ setAttributedTitle:tAttributedString];

[tAttributedString release];

- (IBAction) compute:(id) sender
float tHeight=0;
NSString * tString=@"It's a long list title, don't you think?";
float tMaxWidth=134.0f;
NSFont * tFont;

tFont=[NSFont systemFontOfSize:13.0f];

if (tString!=nil)
NSTextStorage * tTextStorage;

tTextStorage=[[NSTextStorage alloc] initWithString:tString];

if (tTextStorage!=nil)
NSTextContainer * tTextContainer;

tTextContainer = [[NSTextContainer alloc] initWithContainerSize: NSMakeSize(tMaxWidth, FLT_MAX)];

if (tTextContainer!=nil)
NSLayoutManager * tLayoutManager;

tLayoutManager = [[NSLayoutManager alloc] init];

if (tLayoutManager!=nil)
[tLayoutManager setTypesetterBehavior:NSTypesetterBehavior_10_2_WithCompatibility];



[tTextStorage addAttribute:NSFontAttributeName value:tFont range:NSMakeRange(0, [tTextStorage length])];



tHeight=NSHeight([tLayoutManager usedRectForTextContainer:tTextContainer]);

[tLayoutManager release];

[tTextContainer release];

[tTextStorage release];

NSLog(@"%@: %f %f %@",tString,tHeight,tMaxWidth,tFont);


Cocoa-dev mailing list (Cocoa-dev@xxxxxxxxxxxxxxx)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)

Help/Unsubscribe/Update your Subscription:

This email sent to maillists@xxxxxxxxx