首页 > 解决方案 > 旋转模拟时,内容不会调整大小。Xcode 11

问题描述

当我在 Xcode 11 中运行我的应用程序模拟时,它运行良好(纵向或横向)。但是当我旋转时,它不会调整到我为该方向设置的适当约束。

肖像中的 Sim

旋转后的景观模拟

约束图像

如果我停止应用程序在后台运行并路由模拟然后打开它,那么它工作正常。

如何在设备旋转时调整内容的大小?

标签: iosswiftxcodexcode11

解决方案


您将不得不使用约束或自动布局来固定子视图(文本、图像、旋转到父视图后未正确显示的子视图(例如UIView您的主视图)。UIViewController

有很多地方可以这样做。这些是一些例子:

  • Interface Builder中:您需要使用

    1. 自动布局来定义每个子视图如何拉伸,以及子视图的锚定位置。使用以下方法来实现此目的: 在此处输入图像描述
    2. 使用约束进行固定和锚定:

    如何添加

    在此处输入图像描述 在此处输入图像描述

    如何检查

    在此处输入图像描述

  • 代码中:您可以使用

    1. 将您的视图固定到超级视图的约束。
        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
    
    1. 使用框架和尺寸:
    titleLabel.frame = mySuperView.frame
    

    对于代码布局/约束,如果您要锚定视图,我发现最好在将子视图添加到父视图时添加它(在viewDidLoadinit...),但如果您正在使用尺寸(widthAnchorheightAnchor),或者如果您是使用框架和大小,布局更新方法(layoutSubviews, didLayoutSubviews, transition..., ...)是最好的地方,因为它们会在旋转变化时更新。

注意:我使用 xcode 11.7 制作屏幕截图,xcode 12 更改了一些图标,因此它们看起来会略有不同。但是,功能是相同的。


推荐阅读