问题标签 [uitraitcollection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2529 浏览

ios8 - 当另一个视图控制器显示在它上面时,UIPresentationController 会改变大小

我正在使用 UIPresentationController 展示一个模态视图控制器。我使用以下方法将presentView的框架设置为小于containView的边界:

到目前为止,一切都很好。

现在,我在当前显示的模态视图控制器之上以模态方式(默认不是自定义)呈现另一个视图控制器,它占据了整个屏幕。因此,我在覆盖整个屏幕的默认模态视图控制器下方有一个自定义模态视图控制器。

问题是当我关闭覆盖整个屏幕的顶视图控制器时,我的自定义视图控制器也会显示覆盖整个屏幕。我希望我的自定义视图控制器的大小保持不变(小于 containerView)。有什么办法可以做到这一点。

任何帮助,将不胜感激

0 投票
2 回答
356 浏览

ios - UISplitViewController:从紧凑旋转到常规时如何防止扩展

补充问题有很多答案,即如何防止转换到PrimaryOverLayRegularCompact接口更改,例如使用

就我而言,我有一部 iPhone 6+,其细节视图以纵向显示。当我将设备旋转到水平(CompactRegular)时,我希望主视图保持隐藏状态。我已经尝试在很多地方将其设置为preferredDisplayMode.PrimaryHidden但它没有明显的影响。谷歌搜索一无所获。

0 投票
1 回答
936 浏览

ios - iPad 上的 UITraitCollection 和 UISplitViewController

我正在使用UISplitViewController. 我已经配置了UISplitViewController这样的主视图控制器(即左侧的较薄视图)始终可以通过splitViewController.preferredDisplayMode = .AllVisible.

详细视图控制器是一个UICollectionView,我想根据 iPad 是纵向还是横向来更改它的显示方式。如果是纵向,我会让集合视图只显示一列(类似于 a UITableView)。如果它是横向的,有更多可用的水平屏幕空间,那么我将显示多个列。我想我可以在实现该集合视图的数据源和委托的类中使用一些条件来做到这一点。

我不想只检查设备的方向,因为我更喜欢使用尺寸类和特征,以便应用程序也可以在 iPhone 等上运行(当遇到相同的特征时)。

我知道每个视图控制器都有一个traitCollection属性,但是当我在方法中打印出这个属性时,无论 iPad 的初始方向如何,viewDidAppear它总是说视图控制器是_UITraitNameHorizontalSizeClass = Compact, _UITraitNameVerticalSizeClass = Regular.

如果 iPad 是纵向的,我会预料到这一点,但即使它最初是横向的,也会打印出来 - 尽管我希望该方向是水平RegularRegular垂直尺寸类。

此外,如果我traitCollectionDidChange:在视图控制器中实现该方法,它永远不会调用旋转,或者即使点击详细视图控制器上的展开按钮以隐藏主视图控制器(并为详细视图控制器提供全屏显示)。

所以,我的问题是如何检测拆分视图控制器中视图控制器的大小类/特征变化......或者我这样做完全错了吗?

出于响应中任何示例代码的目的,该应用程序是用面向 iOS 9 的 Swift 编写的。

提前感谢您的帮助!

0 投票
1 回答
258 浏览

ios8 - 在 traitCollection 和大小类方面向左还是向右?

我学习了 Auto Layout、UITraitCollection 和 size 类来制作自适应 UI。但我明白我错过了一件事。

简单地说:我希望我的 UI 像原生相机应用程序一样粘在主页按钮上。为此,我指定了类似“H:[view]-0-|”的约束字符串。但是如果我在横向左右位置启动应用程序,视图的布局会有所不同。所以这意味着关于尺寸等级的信息是不够的。就尺寸等级而言,没有横向或横向之类的东西。

有 UIDevice.currentDevice().orientation 这样的属性。但它已被弃用。

那么在特征和尺寸类别方面,我应该如何确定方向是横向还是横向,以便我可以将视图固定在主页按钮上?

0 投票
0 回答
102 浏览

ios - 自定义 segue 后,UITraitCollection 没有任何信息

注销后返回主屏幕时,它无法返回任何有关其traitCollection. 我想获得它的尺寸等级,但这是不可能的。

在此处输入图像描述

当我在没有任何 segue 的情况下运行屏幕时,它具有所有信息:

但是当屏幕在自定义 segue 之后运行时,它会显示:

它没有关于视图的任何信息。

自定义segue的代码如下:

0 投票
1 回答
118 浏览

ios - 导航弹出动画意外 - 跳出屏幕

我遇到了一个问题,即我UINavigationController的默认弹出动画出现意外行为 - 弹出的控制器有时会向左或向右跳出屏幕。

该问题似乎与覆盖控制器的UITraitCollection.

我有一个通用应用程序,在 iPad 上,自定义UIPresentationController以部分模式显示导航,其宽度是屏幕宽度的一小部分。因此,我覆盖了'属性horizontalSizeClass上的 to compact ,因此在这个“半模态”中呈现的所有控制器都假定它们的 iPhone 布局。UIPresentationControlleroverrideTraitCollection

覆盖该大小类似乎会触发该错误。突然,当在那个“半模态”中弹出一个控制器时,动画在横向中被搞砸了(它要么向左要么向右跳跃)。

这是它的外观示例: 意外流行动画

尝试

首先,当我摆脱traitCollection覆盖时,错误就消失了。显然,我想覆盖水平尺寸类,因为这些视图也在常规环境中的其他地方重用。

因此,我尝试以其他方式覆盖horizontalSizeClass模态的子项,例如:

  • 使用模态导航UINavigationControllerDelegate覆盖每个孩子的traitCollection开启 navigationController:didShowViewController:animated:- 这似乎没有什么区别
  • 让第一个导航孩子traitCollection 在推动它之前覆盖次要孩子

像这样:

有趣的是,这修复了弹出动画错误,但我的主控制器 ( self) 仍处于常规状态horizontalSizeClass......此外,这似乎是一种不好的做法。我的视图控制器不需要知道任何关于他们的演示的信息!这应该由 来处理,并且似乎受到演示控制器具有属性UIPresentationController的事实的支持。overrideTraitCollection

0 投票
0 回答
189 浏览

ios - iOS - 有选择地调用特征收集事件

我有一个带有一系列按钮和一个内容视图的主视图控制器。当一个按钮被按下时,所有的子视图都从内容视图中移除,并加载一个新的。它本质上是一个带有一些额外功能的自定义标签栏控制器。

从我看到的顶级视图控制器中willTransitionToTraitCollection:withTransitionCoordinator:traitCollectionDidChange:正如预期的那样。我在这两种方法中都调用了 super ,以便将这些事件传递给孩子并适当地呈现视图。

只有traitCollectionDidChange:将其用于子视图控制器(用于嵌套视图)。这不是世界末日,因为我可以很容易地陷入那个事件,但我很奇怪只有一个事件在传播。

这是预期的行为,还是我错过了什么?

0 投票
1 回答
712 浏览

ios - traitCollection.horizo​​ntalSizeClass 在 iOS 8.1 上报告 Compact,在 iOS 8.4 和 9.x 上报告 Regular

我将代码中的“完成”按钮添加到导航栏中,仅适用于 iPad 的 UIViewController 子类,更准确地说是使用以下代码的常规尺寸类。我们支持 iOS 8+。if 语句在带有 iOS 8.1 的 iPad Air 2 上运行时返回 Compact Size Class,并且它正确报告 iOS 8.4 或 iOS 9 的常规。这是 iOS 中的错误,还是我做错了什么?

在 if 语句上设置断点时的 lldb 输出

我在“iPad”上使用 Page Sheet 模式演示。

0 投票
1 回答
75 浏览

ios - 我读过 MVC 可以通过 UIViewController 中的这个方法找出它的大小类环境

let mySizeClass: UIUserInterfaceSizeClass = self.traitCollection.horizontalSizeClass

并且返回值将是枚举 .Compact 或 .Regular(或 .Unspecified)。

当我在代码编译器中尝试它时,会显示一个警告:Value of type 'NSObject -> () -> MyViewController' has no member 'traitCollection'.

请告诉我有什么问题。我正在 iTunesU 上学习斯坦福的课程,我有这个例子。

0 投票
1 回答
371 浏览

ios - 在 TraitCollectionDidChange 之后重新组织 Toolbar 和 NavigationBar

我想支持类似于 Safari 的布局,在水平规则的环境中,按钮显示在导航栏上,但在水平紧凑的环境中,一些按钮在导航栏上,一些按钮在工具栏上。

这就是我的traitCollectionDidChange

但是,从常规的水平尺寸类别过渡到紧凑的尺寸类别时似乎存在问题。导航栏中的项目总是正确的,但工具栏项目被截断或为空。

当调出 ViewController 时,它总是被正确设置和显示,并且在水平规则尺寸类中总是正确的——只有当尺寸类从常规变为紧凑时才会出现问题。

这是一个示例,显示右下角的添加按钮在大小类更改后从工具栏中消失。

在此处输入图像描述

在 5.5 英寸 iPhone 上旋转设备时也会发生同样的情况,在 iPad 上纵向时,工具栏在激活多任务处理后只是空的。这里有什么问题?谢谢!