首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIView中心属性提供了意外的结果

UIView中心属性提供了意外的结果
EN

Stack Overflow用户
提问于 2016-02-27 12:46:55
回答 1查看 54关注 0票数 0

我正在尝试以编程的方式设计屏幕。首先,我设置导航栏。然后添加一个表视图,然后添加一个普通的UIView。我在使用这个最后添加的UIView.center属性时遇到了问题。我想在此视图中添加一个UIActivityIndicatorView。我的代码如下(使用大型白色活动指示器的默认高度和宽度,分别为37pt ):

代码语言:javascript
复制
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时,如下所示:

代码语言:javascript
复制
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)
}

我得到了以下结果(我猜,这是错误的,出乎意料的):

那么,我的两种方法到底有什么不同,这里到底出了什么问题?我对这两种方法的理解是错误的吗?如果是,那么这里到底发生了什么?

EN

回答 1

Stack Overflow用户

发布于 2016-02-27 12:55:38

  1. ViewDidload

在此方法中,视图的宽度和高度将不会正确。您可以打印视图的宽度和高度,然后就可以知道reason.

  • ViewDidAppear

当视图实际可见时,将调用viewDidAppear,因此您的代码必须放在此处//现在选中它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35665791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档