【发布时间】:2017-09-17 04:54:54
【问题描述】:
我有 UIView 子类,并且为了布局 UI 元素,我不使用自动布局。我想设置框架取决于框架的宽度或高度。但是,当我在 alloc]init] 方法之后立即执行此操作时,看起来 self.frame.size.height 或宽度为零。对于临时解决方案,我做了以下操作:
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];
});
但我当然需要知道,视图何时完成加载以及它的实际 self.frame.size.width 和高度在哪里。
【问题讨论】:
-
你看过
- (void)viewDidLayoutSubviews;吗?苹果参考:developer.apple.com/reference/uikit/uiviewcontroller/… -
@DonMag 那是视图控制器,不是视图。
-
你的初始化器真的设置了self的大小吗?
-
如果您只是在这里用谷歌搜索试图在 UIView 中执行您可以在视图控制器中执行的操作,在 某些 情况下,
didMoveToSuperview是解决方案。
标签: ios objective-c uiview