Evg*_*ban 10 objective-c uiview ios
我有UIView子类,并且为了布局UI元素,我没有使用自动布局.我想设置框架取决于框架的宽度或高度.但是,当我在alloc]init]方法之后立即执行此操作时,它看起来像self.frame.size.height或width为零.对于临时解决方案我做了以下:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.25 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
UIImage *img = [UIImage imageNamed:@"sound_level_arrow"];
_arrowImgView = [[UIImageView alloc] initWithFrame:CGRectMake(self.frame.size.width/2, 0, img.size.width, img.size.height)];
_arrowImgView.center = CGPointMake(self.mainImgView.frame.size.width/2, self.mainImgView.frame.size.height-2);
_arrowImgView.image = [UIImage imageNamed:@"sound_level_arrow"];
_arrowImgView.contentMode = UIViewContentModeCenter;
[self.mainImgView addSubview:_arrowImgView];
});
Run Code Online (Sandbox Code Playgroud)
但是当然我需要知道,当视图完成加载并且它具有实际的self.frame.size.width和height.
rob*_*off 11
如果要在自定义视图子类中执行此操作,请layoutSubviews在该类中重写.由于iOS可能会发送layoutSubviews多次,因此请注意仅_arrowImgView在第一次创建时:
- (void)layoutSubviews {
[super layoutSubviews];
if (_arrowImgView == nil) {
UIImage *image = [UIImage imageNamed:@"sound_level_arrow"];
_arrowImgView = [[UIImageView alloc] initWithImage:image];
_arrowImgView.contentMode = UIViewContentModeCenter;
[self addSubview:_arrowImgView];
}
CGRect myBounds = self.bounds;
CGRect mainFrame = self.mainImageView.frame;
_arrowImgView.bounds = CGRectMake(0, 0, myBounds.size.width, myBounds.size.height);
_arrowImgView.center = CGPointMake(mainFrame.size.width / 2, mainFrame.size.height - 2);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9402 次 |
| 最近记录: |