问题标签 [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 回答
896 浏览

ios - 如何在代码中使用两个大小类创建 UITraitCollection?

我有一个简单的扩展UITraitCollection

之前,我需要为此编写测试(使用 TDD):

但错误是:

不能分配给属性:horizontalSizeClass是一个只能获取的属性。

那我该怎么办?

0 投票
0 回答
48 浏览

ios - Different layout for the same size class and almost the same view's width across devices

Situation on below image shows the problem. There are two devices: iPod and iPad Pro. On iPad Pro there is split view with my app on the right site. My app uses UISplitViewController for appropriate screen width.

Why it makes difference as you can see in the image below?

enter image description here

Is there a way to change constraints somehow depending on size classes or sth else excluding screen width?

0 投票
1 回答
1447 浏览

ios - 如何从嵌套的子视图控制器中检查屏幕的当前大小类?

我的应用中有一个带有多个子视图控制器的屏幕。在 iPhone 等较小的屏幕尺寸上,视图控制器彼此齐平放置。在 iPad 屏幕尺寸上,其中一个视图控制器浮动在另一个之上。

我想这样做,所以有时浮动的视图控制器在浮动时只有一个角半径。因此,我已经考虑在我的子视图控制器中覆盖类似viewDidLoad或的方法overrideTraitCollection(forChildViewController:),以根据其大小类是否为 wRegular、hRegular 来设置其视图的角半径,这适用于纵向或横向的 iPad。

但是,子视图控制器似乎没有设置与根视图控制器相同的大小类值,并且沿着parentViewController层次结构向上移动似乎并没有让我进入一个确实具有这些值的视图控制器。

我应该如何从子视图控制器访问视图层次结构顶部的当前大小类?

编辑: 我已经使用 UIScreen 尝试了现有的答案,当我的应用程序是唯一可见的应用程序时,它的效果很好。但是,当应用程序在分屏模式下运行时,它会导致不正确的行为——即使应用程序很窄,它也总是返回常规/常规。是否有一种解决方案涉及仅针对我的应用所在的屏幕部分获取尺寸等级?

0 投票
2 回答
833 浏览

ios - UIView 框架在 traitCollectionDidChange 期间未更新

我基于 UIView 子类中的框架使用 CALayer 进行了一些绘图,我需要在设备旋转时更新线条,但在 traitCollectionDidChange 中,框架仍然保持旋转前的值。有没有办法在旋转后获取帧的更新值?

我的绘图代码看起来像这样,在它的视图控制器的 traitCollectionDidChange 中调用:

这部分绘制了我的自定义图形的 X 轴,但更重要的是帧值是旋转之前的值,因此整个图形的位置和大小都不合适。

在视图控制器中,我通过以下方式调用它:

0 投票
0 回答
69 浏览

ios - 如何在 traitCollectionDidChange 之后获取 UIModalPresentationPageSheet 框架

当我使用多任务并尝试获取UIViewController.

我用:

在我们更改应用程序特征集合后更新视图的框架。

我如何测量宽度:

问题是UIViewController横向模式的最开始宽度是1024px。在更改特征集合后,UIViewController可预测的大小正在发生变化。但是当我回到初始状态时,宽度应该是 1024px 但它是 694px。

0 投票
1 回答
2580 浏览

ios - Equivalent of UIApplication.shared.preferredContentSizeCategory in app extension

My open source library needs to be able to call UIApplication.shared.preferredContentSizeCategory. But UIApplication.shared is unavailable in extensions. The build error suggests that I find a view controller-based way to solve my problem, but I'm writing a library, so I don't have access to any view controllers. Is there a way to get the root view controller of an extension, or a way to get the outermost UITraitEnvironment?

I support iOS 9+, but this feature could be 10+ if that makes it possible.

0 投票
1 回答
60 浏览

ios - 带有 Trait 集合的 Storyboards 横向模式

我有一个只能在横向模式下工作的应用程序,并且正在使用情节提要来布局视图。问题是使用 Trait 集合/大小类,默认情况下视图以纵向模式显示,这使得布局变得困难。我无论如何都找不到更改主 UIView 的框架,以便它以横向显示。有任何想法吗?

0 投票
2 回答
1895 浏览

swift3 - Xcode 模拟器不调用 traitCollectionDidChange

我正在traitCollectionDidChange(_)更新我的紧凑和常规约束。当我通过旋转约束在设备上进行测试时,会正确更新。但是,当我尝试在模拟器中测试相同的代码时,什么也没有发生。我插入了打印语句,我可以看到在模拟器旋转时没有任何反应。这是一个错误,还是我需要为模拟器做一些特别的事情?

提前致谢。我正在使用 Xcode 8.2.1 顺便说一句。

这是我的代码:

控制台输出如下:

基于hoshy的问题的小更新:我正在将模拟器与 iPhone 设备一起使用。特别是 iPhone SE。

0 投票
1 回答
1178 浏览

ios - 第二次旋转后 tableView.tableHeaderView 中的视图框架错误

我想根据大小类构建一个具有两种不同布局的简单 Swift 3 iOS 10 应用程序。当我viewControllertraitCollection.verticalSizeClass类型为 时.regular,我希望我的blueView(的子类 UIViewtableView.tableHeaderView的高度为50。当我viewControllertraitCollection.verticalSizeClass类型为 时.compact,我希望我blueView在左边(自动布局宽度约束为240)并且我tableView在右边。


这是我的UIViewController实例的代码:

以下屏幕截图显示了场景设置为纵向模式的情节提要:

在此处输入图像描述

以下屏幕截图显示了场景设置为横向模式的情节提要:

在此处输入图像描述

完整的项目可以在这个Github repo上找到。


启动时一切正常:blueView设置为tableView.tableHeaderView并且具有正确的高度50。如果我旋转我的设备,一切仍然正常:blueView并且tableView有正确的约束。

但是,如果我第二次旋转设备,blueView就会从控制器的视图中消失,并且tableView显示一个空的tableHeaderView. 我能做些什么来解决这个问题?

0 投票
1 回答
241 浏览

ios - 何时正确设置尺寸等级?

我正在尝试在我的单元测试中测试一些尺寸类特定的特征,但遇到了一个问题,即尺寸类未正确设置在awakeFromNib. 当我运行应用程序时,通过在屏幕上显示所有内容后在 LLDB 中检查它来正确设置它,但我似乎永远无法在进行单元测试时触发设置的大小类。

有没有人知道何时设置特征集合/如何触发它?

编辑:为了清楚起见,这些是单元测试,它们只测试视图,而不是它所在的 ViewController。所以我从它的 nib 加载视图,然后对其执行测试。

我试过打电话layoutSubviews()希望这会触发某种尺寸等级的设置,但它没有用。当我在堆栈跟踪中放置断点时,traitCollectionDidChange只有其中有main,所以我不确定是什么实际触发了它。