UIActivityViewController的位置是否改变了设备的方向?

时间:2014-09-26 09:02:23

标签: ios objective-c uitableview constraints uiactivityindicatorview

我正在构建一篇阅读app的文章。我以编程方式在UITableViewController中实现了UIActivityViewController。我正面临着 当我更改设备的方向时,UIActivityViewController的位置发生了变化。

这是我的代码:

       indicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
       if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
        {
            indicator.center = CGPointMake(350, 300);
            [self.tableView addSubview:indicator];
            [UIApplication sharedApplication].networkActivityIndicatorVisible = TRUE;
             [indicator layoutIfNeeded];
          }

     else{

            indicator.center = CGPointMake(200, 400);
            [self.tableView addSubview:indicator];
            [UIApplication sharedApplication].networkActivityIndicatorVisible = TRUE;

        }

如果可以通过编程方式应用约束,我该怎么做。

非常感谢帮助!

2 个答案:

答案 0 :(得分:0)

您可以indicator.center = self.tableview.center并在定位时致电[self.view layoutIfNeeded]。 无论如何,我只是注意到一些看起来很奇怪的东西。你做[self.view addSubview:indicator]但是你做[indicator bringSubviewToFront:self.view],我实际上并没记得这可能是什么行为(可能没什么),但应该反过来因为指标是你自己的子视图。视图。 此外,为什么在else语句的主体中添加指示符两次(一次用于tableView,一次用于视图)?

修改

或者您可以使用Autolayout并忘记帧。像这样:

NSLayoutConstraint *centerX = [NSLayoutConstraint constraintWithItem:indicator
                                                              attribute:NSLayoutAttributeCenterX
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:self.tableView
                                                              attribute:NSLayoutAttributeCenterX
                                                             multiplier:1
                                                               constant:0];
[self.view addConstraint:centerX];

为centerY做同样的事情。

答案 1 :(得分:0)

看起来您在设置activityIndi​​cator时首先创建并添加到视图层次结构中。但是你在轮换时没有更新那个位置。

您可以通过使用另一个响应者在此处注明的约束(centerX和centerY约束),或覆盖layoutSubviews并将activityIndi​​cator的中心点设置为tableView的中心来实现此更新。

类似的东西:

- (void)layoutSubviews
{
    [super layoutSubviews];

    self.activityIndicatorView.center = self.tableView.center;
}