2012-06-15 77 views
2

我從IB創建了一個簡單的NSScrollView。 我掛它從我的.h文件中這是一個IBOutletNSScrollView在NSScrollView中的大小更改時NSTextField的位置錯誤

IBOutlet NSScrollView *scroller; 

在我的.m,我插入編程的NSTextField這樣的:

NSTextField *dateTextField = [[NSTextField alloc]initWithFrame:NSMakeRect(30,yPos - kBreakHeight - 15, 100, kBreakHeight)]; 
[dateTextField setBordered:NO]; 
[dateTextField setEditable:NO]; 
[dateTextField setBackgroundColor:[NSColor clearColor]]; 
[dateTextField setAlignment:NSLeftTextAlignment]; 
[dateTextField setFont:[NSFont fontWithName:kAppFontBold size:11]]; 
[dateTextField setTextColor:[NSColor colorWithCalibratedRed:33/255.0 green:33/255.0 blue:33/255.0 alpha:1]]; 
[dateTextField setStringValue:dateString]; 
[[scroller documentView] addSubview:dateTextField]; 

不幸的是,在我的觀點的第一頓午餐,文本字段不在正確的位置(但其他元素在documentView是),並且只有調整我的窗口大小時,位置纔是正確的。

任何想法如何在發佈時擁有正確的位置?

回答

0

您不會說明您定位的是哪個版本的OS X,並且它是否是Lion,無論您是使用自動佈局還是使用傳統彈簧和struts。

如果使用彈簧和支撐(自動調整遮罩),則應該在文本字段上添加幀之前或之後設置一個幀。

如果使用自動佈局,添加字段後必須添加適當的約束。哦,並且記住在添加之前將文本字段的translatesAutoresizingMaskIntoConstraints屬性設置爲NO,否則會添加自己的約束,這會影響您添加的約束。根據我的經驗,添加自己的顯式約束要比依賴自動生成的約束好得多。

上有佈局約束一些很好的文檔在這裏:

https://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AutolayoutPG/Articles/Introduction.html

http://developer.apple.com/library/mac/#releasenotes/UserExperience/RNAutomaticLayout/_index.html#//apple_ref/doc/uid/TP40010631

而且從去年的WWDC會議上確實有助於理解它(需要密碼):

https://developer.apple.com/videos/wwdc/2011/?id=103

+0

不幸的是,我不使用自動佈局屬性...其他視圖正確定位呢?是因爲它來自IB組件嗎?有關信息,我正在爲Lion發佈工作。 – user1458963

0

我找到了解決方案,只需添加...:

[dateTextField setAutoresizingMask:NSViewHeightSizable | NSViewWidthSizable | NSViewMaxXMargin | NSViewMaxYMargin | NSViewMinXMargin | NSViewMinYMargin];