IBOutletCollection中不同对象的框架返回空

时间:2013-08-05 19:38:02

标签: ios objective-c cocoa-touch iboutletcollection

我在故事板上创建了8个不同的对象(4对UIImageView和textview)并将它们连接到IBOutletCollection,但是当我这样做时

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

它返回

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

[infoElements count]正确返回8

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

正确返回对象,只丢失了帧。我只需要IBOutletCollection中每个对象的位置(x和y)。

初始化是这样的:

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

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

我现在用谷歌搜索了好几个小时,并没有发现任何人有同样的问题(除了this unanswered question here),所以我认为我只是做错了什么

修改

只是为了澄清,IBOutletCollection中的对象不在0,0位置并且大于0,0

1 个答案:

答案 0 :(得分:2)

我猜您正在使用自动布局。在这种情况下,在调用layoutSubviews之前,不会设置框架。

因此,如果您需要获取框架,则可以在- (void)viewDidLayoutSubviews中执行此操作。但是,如果您计划操作框架,则应在使用“自动布局”时使用“约束”进行操作。

另一种选择是在故事板中关闭自动布局。