IOS MBProgressHUD显示位置错误(它不是中心,加载显示在左上方。)

时间:2012-11-26 02:52:26

标签: ios objective-c position uiactivityindicatorview mbprogresshud

我使用MBProgressHUD showWhileExecuting来查询网络中的某些数据,但有时MBProgressHUD不是中心

enter image description here

图片(红色数字):

显示在左上方,背景显示在中心。

1.加载显示不在MBProgressHUD的背景上 2.just显示不包含加载的背景

-(void)viewDidLoad
{
    //other code ...

    mb = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
    // --> i try which causes also an error
    //[[MBProgressHUD alloc] initWithWindow:self.view.window]; 
    // --> error too
    //[[MBProgressHUD alloc] initWithView:self.view];
    mb.labelText = @"loding city...";

    [self.navigationController.view addSubview:mb];
    [mb showWhileExecuting:@selector(queryCity:) 
                  onTarget:self 
                withObject:[NSNumber numberWithInt:1] 
             animated:YES];
}

-(void)queryCity:(NSNumber*)flag
{
    //query some data from network.
}

4 个答案:

答案 0 :(得分:2)

仅供参考:我通过说

来修复它

[[[UIApplication sharedApplication] keyWindow] addSubview:_progress];

而不是

[self.view addSubview:_progress];

我真的不喜欢它,也因为它在另一种情况下与self.view一起使用,但我在这里没有看到另一种选择。

答案 1 :(得分:1)

我发现了这个问题。 当MBProgressHUD清理时,它将丢失rect。

- (void)cleanUp {
taskInProgress = NO;
    //changed by zt9788 2012-12-26
    //comment this line to fix it.
//self.indicator = nil;
#if !__has_feature(objc_arc)
[targetForExecution release];
[objectForExecution release];
#else
targetForExecution = nil;
objectForExecution = nil;
#endif
[self hide:useAnimation];

}

答案 2 :(得分:1)

我遇到了同样的问题。看看这个,为我解决它并且非常简单:

[MBProgressHUD showHUDAddedTo:_selfWeak.viewOverlay animated:YES].center 
 = self.viewOverlay.center;

如果您通过调用showHUDAddedTo:animated:来保存您收到的实例类型,那么您应该能够做更多的事情。

答案 3 :(得分:0)

MBProgressHUD会自动将其自身定位在您添加到的视图上。自从您将其添加到导航控制器视图后,它就会定位为阻止在进行中与导航栏的任何交互。

如果这不是你想要发生的,那么将MBProgressHUD子视图添加到不同的视图,在这种情况下,你可能想要它在self.view而不是self.navigationcontroller.view。