【问题标题】:UILabel.center is 0? how is that possible?UILabel.center 是 0?这怎么可能?
【发布时间】:2012-11-06 13:03:08
【问题描述】:

我试图从一些 UILabel 的 center 属性中获取 CGPoint(这是一个出口集合的一部分)。现在,当我这样做时:

for (UILabel *label in labelCollection) {
      NSLog(@"%f", label.center.x);
}

它只是返回 0,和 center.y 一样吗?怎么会?我需要那些坐标呵呵:)

提前感谢

//编辑 上传了一张图片:带有“a”“b”“c”“d”的标签就是我说的标签。我尝试更改代码中的 text.property 并且效果很好,但它不会给我它所在的坐标。

【问题讨论】:

  • 运行该循环时,标签是否显示在屏幕上?
  • 是的,它们正在屏幕上显示。
  • 我会尝试记录他们的帧值,看看是否有任何可疑之处。 (NSStringFromRect(label.frame))
  • 好吧,发生了一些很奇怪的事情,我试着做 NSLog(@"%f, %f", label.frame.size.height, label.frame.size.width); NSLog(@"%f, %f", label.frame.origin.x, label.frame.origin.y);它全部返回 0
  • 我开始怀疑该集合中的标签对象与您屏幕上的对象不同。如果您在该循环中更改每个标签的文本,是否会更改显示?

标签: iphone objective-c xcode uikit uilabel


【解决方案1】:

验证视图是否具有超级视图。该值取决于超级视图的坐标。

【讨论】:

  • 我将视图添加到故事板编辑器的主视图背景中,它们应该有一个超级视图,否则它们无法添加到屏幕上,对吗?
  • 虽然,我确实将它转换为 UIController 而不是 UIView 的子类,也许这搞砸了?
  • 刚改回UIView,还是一样的问题
  • @user1012558 好的 - 0 可能是正确的值,如果面积为 0 则更有可能
  • 我有 4 个标签,每个标签的位置不同,每个标签都是 0
【解决方案2】:

我找到了答案,这与我在 viewDidLoad 中做所有事情有关,我应该在 viewDidAppear 中做这件事。一定是因为在 viewDidLoad 上,它还没有被放置,因此我仍然可以更改文本,因为对象标签已创建,但我无法获取原点,因为它尚未放置。

感谢小伙伴们的帮助。

【讨论】:

  • 或awakeFromNib。在视图加载之前,对象并不“存在”。这发生在viewWillAppear 之后和viewDidAppear 之前。
【解决方案3】:

您删除约束然后运行应用程序可能是约束创建问题,因为新的 xcode 约束会在某些函数和属性上产生问题,因此首先通过取消选中“使用 autlayout”来删除约束,然后检查应用程序

【讨论】:

    猜你喜欢
    • 2020-05-25
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多