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