【问题标题】:Troubleshooting UIKit display issues排查 UIKit 显示问题
【发布时间】:2016-10-25 23:09:42
【问题描述】:

我有一个非常奇怪的问题,即在构建和运行项目时没有显示(不可见/渲染)图表 (SwiftChart)。

一些背景:

  • XCode 8(项目最初是和 XCode 7 项目)
  • Objective C 项目/ViewControllers
  • 用于渲染图表的 swift 文件(已尝试从 viewDidLoad 和 viewDidLayoutSubviews 调用此文件)
  • 包含所有 ui 元素的故事板
  • 使用 CocoaPods
  • 您在 Swift 中看到的“打印”代码输出“空”

要渲染图表的 UIView 存在于 storyboard 中,设置如下

被调用的代码是:

let chart = Chart()
print(chart.window?.frame.width)
print(chart.window?.frame.height)

let data = [(x: 0.0, y: 0), (x: 3, y: 2.5), (x: 4, y: 2), (x: 5, y: 2.3), (x: 7, y: 3), (x: 8, y: 2.2), (x: 9, y: 2.5)]
let series = ChartSeries(data: data)
series.area = true
chart.xLabels = [0, 3, 6, 9, 12, 15, 18, 21, 24]
chart.xLabelsFormatter = { String(Int(round($1))) + "h" }
chart.add(series)

视觉上我什么也看不见。我正在努力找出问题可能出在哪里,因此非常感谢任何指针

【问题讨论】:

  • 代码从哪里调用? viewDidLoad?
  • 我试过 viewDidLoad, viewDidLayoutSubviews

标签: ios objective-c swift xcode8


【解决方案1】:

您可以在以编程方式创建它时使用框架对其进行初始化,因为它是UIControl 子类。看起来他们的第一个代码示例是错误的,但他们在下一个正确解释。所有屏幕视图都至少需要一个框架。

但是,如果您已经在情节提要中看到了此类,则需要一个出口来指向它。您的第一行代码创建了一个新代码,因此您不是在与您设置的代码对话,而是与一个不正确创建的屏幕外代码对话。

所以添加一个插座并将其连接到您的视图,以便您可以与它交谈。

【讨论】:

  • 我明白了,谢谢。现在的问题是,因为我的 ViewController 是 ObjC,所以我无法为我的 Swift 文件创建一个出口。
  • 该代码位于单独的 Swift 文件中,并从初始化 VC 的 ObjC 方法调用。我正在为此使用桥接。因此,如果我尝试从我的故事板创建一个 IBOutlet,我只能对我的 .h 或 .m 文件执行此操作,而不是我的 .swift 文件。我希望这更有意义。
  • 很难理解部分代码列表,但如果您必须将这样的内容分开,为什么不将图表视图的引用传递给初始化所有内容的函数呢?然后你的 VC 的出口保持不变并传递给函数进行操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多