2013-08-05 76 views
0

我創建8個不同的對象上的腳本中(4雙的UIImageView和TextView的)和它們中的每連接到一個IBOutletCollection,但是當我爲此幀返回空

for (UIView *element in infoElements) { 
    NSLog(@"frame: %@", NSStringFromCGRect(element.frame)); 
} 

它返回

frame: {{0, 0}, {0, 0}} 

[infoElements計數]返回正確8

NSLog(@"element: %@", element); 

正確返回對象,只有框架丟失。我只需要IBOutletCollection中每個對象的位置(x和y)。

初始化是這樣的:

@interface infoViewController : UIViewController{ 
    IBOutletCollection(UIView) NSArray *infoElements; 
} 

@property (nonatomic, retain) IBOutletCollection(UIView) NSArray *infoElements; 

我GOOGLE了它幾個小時,現在並沒有發現任何人有同樣的問題(除this unanswered question here),所以我認爲我只是在做什麼錯

編輯

只是爲了澄清,在IBOutletCollection的對象是未在位置0,0和是雙向gger than 0,0

+1

你在哪裏運行這段代碼?在'-init','-viewDidLoad'或其他地方?當你註銷元素本身時,你可以發佈實際輸出嗎? –

+0

-viewDidLoad,第一個元素的輸出是:element:> – athospy

+0

這就是你的問題。取而代之的是,它將在 - 看來會出現。 – AMayes

回答

2

我猜你正在使用自動佈局。在這種情況下,框架將不會被設置,直到layoutSubviews被調用。

所以,如果你需要得到的框架,你可以在- (void)viewDidLayoutSubviews做到這一點。但是,如果您計劃操縱框架,則在使用自動佈局時應該使用約束來實現。

另一種選擇是關閉故事板中的自動佈局。

+0

最後,感謝男人,它的作品在這種方法調用,自動佈局是問題。只是一個側面說明,我能夠使用以下操作對象:element.layer.position = CGPointMake(200,y);與QuartzCore框架 – athospy