旋转模拟时,内容不会调整大小。 Xcode 11
Posted
技术标签:
【中文标题】旋转模拟时,内容不会调整大小。 Xcode 11【英文标题】:When rotating simulation, content does not resize. Xcode 11 【发布时间】:2021-03-16 19:51:40 【问题描述】:当我在 Xcode 11 中运行我的应用程序模拟时,它运行良好(纵向或横向)。但是当我旋转时,它不会调整到我为该方向设置的适当约束。
Sim in portrait
Sim in Landscape after rotation
Image of constraints
如果我停止应用在后台运行并路由模拟然后打开它,那么它可以正常工作。
如何在设备旋转时调整内容的大小?
【问题讨论】:
我在故事板中使用了约束。我将更新帖子以包含我的约束图像 【参考方案1】:我认为您的问题在于您的 height
和 width
约束。
尝试删除MCC.width = 812
和MCC.height = 376
。您为标签设置的其余约束将使其保持在 Video layer
视图的中心。
还可以尝试在您的 Video Layer
视图上删除 height = 2000
,因为您设置的剩余约束应该使其绑定到其视图的边缘。
明确设置高度和宽度约束的问题是,当您旋转设备时,设备的高度和宽度会发生变化。例如,当您运行您的应用程序(从纵向开始)时,您在 iphone 11 上的最大高度为 896,宽度为 414 点。但是当您将其旋转为横向时,这些值会交换,因此您现在的最大高度为 414pt 和宽度为 896 点。
纵向运行您的应用程序,旋转后查看Debug
-- View Debugging
-- Capture View Hierarchy
(在 Xcode 菜单而非模拟器菜单中)。我想你会发现你的Video layer
超出了superView
您希望您的Video layer
内容覆盖整个屏幕吗?如果是这样,在属性检查器中将Content Mode
设置为Aspect Fill
,这将剪辑一些内容。如果您希望所有内容都可见,请将其设置为 Aspect Fit
。
【讨论】:
我已经删除了你告诉我的限制(除了高度 = 2000,因为它说它是必需的。我还尝试了视频层的宽高比填充和宽高比,但它仍然不起作用。 好的,所以您希望滚动视图能够滚动到最大 2000?同样在横向中,您是否希望视频层填充屏幕或保持与纵向相同的尺寸(在这种情况下,您需要滚动以显示其余部分)让我知道您想要的布局是什么,我会为您更新答案。 我希望滚动视图保持为 2000,并且我希望视频层占据全屏(无论是纵向还是横向)谢谢!【参考方案2】:您将不得不使用约束或自动布局来固定子视图(文本、图像、旋转到父视图后未正确显示的那些子视图(例如 UIViewController
的主要 UIView
)。
有很多地方可以这样做。这些是一些例子:
在 Interface Builder 中:您需要使用
-
自动布局来定义每个子视图可以如何拉伸,以及子视图的锚定位置。使用以下方法来实现此目的:
使用约束进行固定和锚定:
如何添加
如何检查
在代码中:可以使用
-
将视图固定到超级视图的约束。
titleLabel.translatesAutoresizingMaskIntoConstraints = false
titleLabel.leadingAnchor.constraint(equalTo: closeButton.trailingAnchor, constant: 30).isActive = true
titleLabel.topAnchor.constraint(equalTo: closeButton.topAnchor).isActive = true
titleLabel.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -15).isActive = true
titleLabel.heightAnchor.constraint(equalToConstant: 50).isActive = true
-
使用框架和尺寸:
titleLabel.frame = mySuperView.frame
对于代码布局/约束,如果您要锚定视图,我发现最好在将子视图添加到父视图时添加它(在 viewDidLoad
或 init...
中),但如果您正在使用尺寸(widthAnchor
和 heightAnchor
),或者如果您使用框架和大小,布局更新方法(layoutSubviews
,didLayoutSubviews
,transition...
,...)是最好的地方,因为它们会在旋转变化。
注意:我使用 xcode 11.7 制作屏幕截图,xcode 12 更改了一些图标,因此它们看起来会略有不同。但是,功能是一样的。
【讨论】:
感谢您的回复,感谢您的详细回答。不幸的是,它仍然不起作用。我不知道发生了什么事,这很令人沮丧 @JonathanSoliman 2000 高度的约束是什么?有一个 2000 值的约束很奇怪吗?如果你删除它,它会解决问题吗? 我有一个高度为 2000 的滚动视图。我还希望视频层位于滚动视图的顶部,占据整个屏幕,并且在您滚动时。视频将随着滚动视图向上移动。以上是关于旋转模拟时,内容不会调整大小。 Xcode 11的主要内容,如果未能解决你的问题,请参考以下文章