我正在尝试以编程的方式设计屏幕。首先,我设置导航栏。然后添加一个表视图,然后添加一个普通的UIView。我在使用这个最后添加的UIView的.center属性时遇到了问题。我想在此视图中添加一个UIActivityIndicatorView。我的代码如下(使用大型白色活动指示器的默认高度和宽度,分别为37pt ):
func setupActivityView() {
let screen = UIScreen.mainScreen().bounds
let view = UIView(frame: CGRectMake(0.0, self.navbar.frame.height, screen.width, UIScreen.mainScreen().bounds.height-self.navbar.frame.height))
view.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.80)
//view.hidden = true
self.activityView = view
self.view.addSubview(view)
let spinner = UIActivityIndicatorView(activityIndicatorStyle: .WhiteLarge)
spinner.startAnimating()
spinner.hidesWhenStopped = true
self.spinner = spinner
/*POINT:1*/ //spinner.center = view.center
/*POINT:2*/ //spinner.frame.size = CGSizeMake(37.0, 37.0)
/*POINT:3*/ spinner.frame = CGRectMake((view.frame.width/2) - 18.5, (view.frame.height/2) - 18.5, 37.0, 37.0)
view.addSubview(spinner)
}在上面的代码中,如果您仔细查看,我已经注释了POINT:1 POINT:2和using POINT:3。这给出了以下结果(这是正确的,也是预期的):

现在,当我使用POINT:1 POINT:2和comment POINT-3时,如下所示:
func setupActivityView() {
let screen = UIScreen.mainScreen().bounds
let view = UIView(frame: CGRectMake(0.0, self.navbar.frame.height, screen.width, UIScreen.mainScreen().bounds.height-self.navbar.frame.height))
view.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.80)
//view.hidden = true
self.activityView = view
self.view.addSubview(view)
let spinner = UIActivityIndicatorView(activityIndicatorStyle: .WhiteLarge)
spinner.startAnimating()
spinner.hidesWhenStopped = true
self.spinner = spinner
/*POINT:1*/ spinner.center = view.center
/*POINT:2*/ spinner.frame.size = CGSizeMake(37.0, 37.0)
/*POINT:3*/ //spinner.frame = CGRectMake((view.frame.width/2) - 18.5, (view.frame.height/2) - 18.5, 37.0, 37.0)
view.addSubview(spinner)
}我得到了以下结果(我猜,这是错误的,出乎意料的):

那么,我的两种方法到底有什么不同,这里到底出了什么问题?我对这两种方法的理解是错误的吗?如果是,那么这里到底发生了什么?
发布于 2016-02-27 12:55:38
在此方法中,视图的宽度和高度将不会正确。您可以打印视图的宽度和高度,然后就可以知道reason.
当视图实际可见时,将调用viewDidAppear,因此您的代码必须放在此处//现在选中它
https://stackoverflow.com/questions/35665791
复制相似问题