iOS - 在运行时获取使用 Interface Builder 创建的 UIView 框架

Posted

技术标签:

【中文标题】iOS - 在运行时获取使用 Interface Builder 创建的 UIView 框架【英文标题】:iOS - get frame of UIView at runtime which was created with Interface Builder 【发布时间】:2016-07-14 16:17:34 【问题描述】:

我正在开发我的应用程序,它使用图表来可视化一些数据。我为此使用了这个漂亮的 Scrollable-GraphView:https://github.com/philackm/Scrollable-GraphView

因为这只是一个继承自 UIScrollView 的类,所以不能与 Interface Builder 一起使用(它也没有实现 init(withCoder:) 函数)。

我现在想用 Interface Builder 添加一个 UIView,它具有在运行时正确调整大小的所有必要约束。如何在运行时用我的 GraphView“替换”那个 UIView?

此方法用于在运行时创建我的图表:

private func createDarkGraph(frame: CGRect) -> ScrollableGraphView 
    let graphView = ScrollableGraphView(frame: frame)

    // ... some customization

    return graphView

【问题讨论】:

【参考方案1】:

在界面生成器中,您可以像普通 UIScrollView 一样拖动 UIScrollView 并设置约束,然后将类设置为ScrollableGraphView,选择正确的模块(导入!!!参见此链接XCODE 7.1 Swift 2 Unknown class in Interface Builder file)。如果您从界面生成器(创建出口.etc)获取滚动视图实例,它必须是ScrollableGraphView 的实例。这应该可以正常工作。

【讨论】:

我之前尝试过,但是当您使用带有界面构建器的自定义视图时,您需要实现 init(coder:) 初始化程序。但事实并非如此。 您收到错误“接口生成器文件 swift 中的未知类 ScrollableGraphView”?您应该选择Class 字段下方的模块。请参阅此链接 [XCODE 7.1 Swift 2 Unknown class in Interface Builder file] (***.com/questions/33033129/…)。设置模块后,它可以工作。我会更新我的答案。 我正在按照您的方式进行操作。我有一个连接到包含 ScrollableGraphView 的 ViewController 的 IBOutlet。但是当我运行我的应用程序时,我收到错误 fatal error: init(coder:) has not been implemented: file ../MyApp/Libraries/ScrollableGraphView.swift, line 244 那是因为init(coder:) 只会产生致命错误。你是怎么做到的?我必须选择什么模块?我没有列出一个.. 现在可以使用了!我刚刚删除了init(coder:) 中的fatal error(...) 调用并将super.init(coder: aDecoder) 放在那里。谢谢!

以上是关于iOS - 在运行时获取使用 Interface Builder 创建的 UIView 框架的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 上使用 google api 获取 json 数据时遇到问题

在 Golang 中解组 XML 时如何在 interface 中获取数据?

《iOS Human Interface Guidelines》——Picker

《iOS Human Interface Guidelines》——System Button

《iOS Human Interface Guidelines》——Quick Look

《iOS Human Interface Guidelines》——Stepper