为啥我的 UIActivityIndi​​cator 在 UIButton 中以负 x 坐标作为子视图

Posted

技术标签:

【中文标题】为啥我的 UIActivityIndi​​cator 在 UIButton 中以负 x 坐标作为子视图【英文标题】:Why my UIActivityIndicator goes in minus x coordinate in UIButton as a subview为什么我的 UIActivityIndi​​cator 在 UIButton 中以负 x 坐标作为子视图 【发布时间】:2013-06-05 07:52:20 【问题描述】:

我在

中有以下代码
- (void) loadView 
    self.okButton.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    CGFloat w = 20;
    self.indicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(5, 0, w, w)];
    indicator.hidesWhenStopped = YES;
    self.indicator.center = self.okButton.center;
    [self.okButton addSubview:indicator];
    indicator.autoresizingMask = UIViewAutoresizingNone;

okButton 被添加到复杂的视图层次结构中。我希望指示器正确放置在 okButton 中。但它在 loadview 和 viewDidLoad 中,框架给出了以下值,

<UIButton: 0x210620a0; frame = (10 121; 300 50); opaque = NO; autoresize = W; layer = <CALayer: 0x21061560>>, 
<UIActivityIndicatorView: 0x21062540; frame = (-0.5 15; 20 20); hidden = YES; layer = <CALayer: 0x21062640>>

为什么指标的 x 从 5 变为 -0.5 ?

编辑: 我应该删除一条线,如下计算指标的位置,

//    self.indicator.center = self.okButton.center;
CGFloat size = 20, y = (self.okButton.frame.size.height - size)/2;
self.indicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(5, y, size, size)];

【问题讨论】:

【参考方案1】:

我认为您的问题出在这一行:

self.indicator.center = self.okButton.center;

Indicator 是 okButton 的子视图,但您使用 x 和 y 值相对于 superview 设置坐标。您应该使用 width/2 和 height/2 从视图内部获取中心。

【讨论】:

谢谢。我没有注意到中心问题。

以上是关于为啥我的 UIActivityIndi​​cator 在 UIButton 中以负 x 坐标作为子视图的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 UIActivityIndi​​cator 在 UIButton 中以负 x 坐标作为子视图

为啥是UIActivityIndi​​catorView!展开时为零?

如何将 UIActivityIndi​​cator 添加到我的应用程序的启动画面?

UIActivityIndi​​catorView 不会在正确的时间停止

UIActivityIndi​​catorView 不工作(获取影响 UIActivityIndi​​catorView 的 Facebook 权限)

UIActivityIndi​​catorView 正确使用