我正在创建一个应用程序,我在其中使用 Cordova Cleaver 作为应用程序中的子视图。根据应用程序的状态,我们可能在视图底部有一个工具栏。当我们隐藏工具栏时,我们增加了 Cordova 视图的大小,以便它占据整个视图(减去顶部的状态栏)。这样做是因为我们可以重用 Webview 来显示来自任意位置的内容,并在这些页面支持时提供 cordova 原生功能,特别是如果它们实现了我们的应用程序 API。
完全披露,我使用 MonoTouch,因为这些是我们希望跨平台使用的一些大型而复杂的业务逻辑,但就视图以及它们的创建方式而言,我只使用 iOS 库(使用 monotouch C# 包装器),但这不应该引起问题。
所以为了清楚起见,我们有我们的 AppViewController,它包含一个工具栏,和一个我们的 WebViewController(CDVViewController 的子类)。工具栏用于允许本地应用程序中的某些功能,例如添加收藏夹或返回主应用程序页面。
这似乎运作良好,但在一个特定情况下(至少到目前为止)存在问题。当我们运行 Cordova 的 camera.getPicture 命令时,状态栏是隐藏的,但相机视图似乎仍然放置在顶部,状态栏空间位于顶部,取消了取消按钮。在 iPhone 上,如果您点击相机按钮或取消,它似乎也会调用此视图下方的工具栏按钮。.
为了解决这个问题,我继承了 CDVCamera,并覆盖了 TakePicture、DidCancelImagePicker、DidFinishPickingMediaWithInfo、DidFinishPickingImage 方法,这样当我们开始拍照任务时,它会隐藏状态栏和工具栏,并调整 WebViewController 的视图大小,以及WebView 通过关联,因此它们将有效地成为唯一的视图。这很有效,但我们开始遇到另一个相关的错误。Camera Picker 在第一次时会显示得非常好,但是如果我们要取消选择器并重新调用(在横向时),它会偶尔在右侧显示一个带有大黑色部分的选择器。在这种状态下,我们可以随意旋转它,它仍然会显示为正方形。在 Portrait 中取消和打开似乎 100% 成功,. 在此视图中点击相机视图似乎可以拍摄照片,但正如您所看到的,就好像相机选择器放大了图像的一个子部分。.
我试图将我的努力基于 Holly Schinsky 的Embed Cordova/PhoneGap as a Subview in your Native iOS Application,但也许我做错了事情,缺少一些配置,或者我应该有更好的方法正在这样做。
任何帮助是极大的赞赏。
其他有用信息:
- 到目前为止,我使用的是 Cordova 2.4.0,但尝试了 2.3.0 和 2.7.0,问题似乎没有任何不同。