【问题标题】:UIView center property is giving unexpected resultUIView center 属性给出了意想不到的结果
【发布时间】:2016-02-27 04:46:55
【问题描述】:

我正在尝试以编程方式设计屏幕。首先,我设置导航栏。之后我添加了一个表格视图,然后我添加了一个普通的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:1POINT:2和使用POINT:3。这给了我以下结果(正确且符合预期):

现在,当我使用POINT:1 POINT:2 并评论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)
}

我得到以下结果(我猜这是错误的和意外的):

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

【问题讨论】:

  • 你在哪里完成分配这个内部视图加载了?
  • 是的。我在viewDidLoad 里面调用这个函数
  • 现在你可以试试我的答案兄弟@The Rohan Sanap
  • 向下 20 像素显示活动指示器?

标签: ios iphone swift uiview uikit


【解决方案1】:
  1. ViewDidload

    在这种方法中,您将无法正确查看宽度和高度。你可以 打印视图的宽度和高度你就会知道原因了。

  2. ViewDidAppear

    viewDidAppear 在视图实际可见时调用,因此您的 代码必须放在这里 //现在检查它

【讨论】:

  • 尝试调用viewDidAppear 中的方法而不是viewDidLoad。结果相同...
  • @TheRohanSanap 不只是单个代码,你的整个代码?
  • 并更改 uiview 名称而不是 view。
  • 试过了。整个代码也是如此,名称也是如此......没有区别
  • ok 做一件事打印你查看的宽度和高度兄弟,如果它与你的框架相同,那么很好,否则告诉我我给出解决方案。
猜你喜欢
  • 2019-05-19
  • 2017-01-05
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 2021-04-22
  • 2016-02-13
  • 2017-11-05
相关资源
最近更新 更多