【发布时间】:2015-09-29 17:30:19
【问题描述】:
目前我有多个UIButtons 在左侧有一个图像(通过 IB 添加)。我想以编程方式将 UIImageView 子视图添加到右侧的按钮。目前我正在这样做:
UIImageView *rightArrow = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"menu-arrow.png"]];
rightArrow.frame = CGRectMake(button.frame.size.width - 32, button.frame.size.height/2 - 9, 17, 17);
rightArrow.tag = 22;
[button addSubview:rightArrow];
这非常适合添加按钮并将其放置在右侧。但是,在 ViewDidLoad 方法中执行此操作会产生问题。在 IB 中,按钮的宽度是视图的宽度。所以在ViewDidLoad 方法中,按钮的宽度没有被自动布局改变。所以它不会出现在最右侧。
所以我把它移到了ViewDidLayoutSubviews。但在 iOS 8 上,这会被多次调用!在 iOS 7 上,它只调用一次!此外,在 iOS 8 中,ViewDidLayoutSubviews 的 LAST 调用在放置图像方面是最准确的!
我该如何解决这个特定问题?另外,如果可能的话,我想以编程方式执行此操作,而不是尝试与 IB 混淆。
编辑:原来最好的答案(IMO)来自 T 先生(在 cmets 中),它统计将代码放入 ViewDidAppear,然后检查您是否已经将 ImageView 添加到按钮.
【问题讨论】:
-
尝试使用 viewDidAppear 而不是 viewdidload
-
@Mr.T 我可以在那里添加它,但我必须检查以确保我没有为每个按钮添加图像。每次视图出现但实际上并未卸载时。
-
"除此之外,我必须进行检查以确保我没有为每个按钮添加图像" 这是什么反对意见?这就是编码是的。
-
@matt 似乎我措辞不当。我的意思是这不是一个特别优雅的解决方案。我认为子类化 UIButton 会更好,这是我相信你在答案中建议的?
标签: ios objective-c iphone uibutton