获取awakeFromNib中的插座大小

时间:2013-02-06 10:31:35

标签: ios objective-c awakefromnib

我创建了一个自定义UICollectionViewCell,其中包含标签的插座(放置在故事板中)。我想从我的自定义awakeFromNib的{​​{1}}方法中获取此标签的高度,但标签的大小始终为UICollectionViewCell

0.000000

控制台输出:

// .h
@interface MyCustomCell : UICollectionViewCell

@property (weak, nonatomic) IBOutlet UILabel *myLabel;

@end

// .m
@implementation MyCustomCell

-(void)awakeFromNib
{
    [super awakeFromNib];

    NSLog(@"%@", self.myLabel);
    NSLog(@"%f", self.myLabel.frame.size.width);
    NSLog(@"%f", self.myLabel.frame.size.height);
}

@end

如何获得标签尺寸? 在调用2013-02-06 11:13:59.628 Test[8880:c07] <UILabel: 0x7649a00; frame = (0 0; 0 0); text = '12h00'; clipsToBounds = YES; opaque = NO; autoresize = TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x7649ac0>> 2013-02-06 11:13:59.628 Test[8880:c07] 0.000000 2013-02-06 11:13:59.630 Test[8880:c07] 0.000000 时获取此类信息是否为时尚早?如果是这样,我的自定义单元格的哪种方法应该可以得到大小?

修改

这是在ViewController中观察到的同样奇怪的行为:

awakeFromNib

输出:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    MyCustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MyCustomCell" forIndexPath:indexPath];
    NSLog(@"%@", cell);
    NSLog(@"%@", cell.myLabel);
}

2 个答案:

答案 0 :(得分:15)

答案的一部分是在dreamzor对iOS AutoLayout - get frame size width的回应中。

  

诀窍是将依赖于帧的代码放到viewDidLayoutSubviews方法

在我的特定情况下,我发现在我的自定义单元格[self layoutIfNeeded];方法中添加awakeFromNib,就在询问插座大小之前就像魅力一样。

答案 1 :(得分:-1)

我不确定这是否是最佳解决方案,但是要对子视图进行一些更改或获取与您相关的信息,我会在子视图上创建一个方法,如“prepareSubviews”或“refresh”或“populateWithData”。在从IB初始化/加载视图后,我在“viewDidLoad”中调用该方法,此时应该加载xib文件并正常工作。