我正在构建一篇阅读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;
}
如果可以通过编程方式应用约束,我该怎么做。
非常感谢帮助!
答案 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)
看起来您在设置activityIndicator时首先创建并添加到视图层次结构中。但是你在轮换时没有更新那个位置。
您可以通过使用另一个响应者在此处注明的约束(centerX和centerY约束),或覆盖layoutSubviews并将activityIndicator的中心点设置为tableView的中心来实现此更新。
类似的东西:
- (void)layoutSubviews
{
[super layoutSubviews];
self.activityIndicatorView.center = self.tableView.center;
}