菜鸟教程小白 发表于 2022-12-11 19:39:39

ios - 在 iPhone X 上横向使用最大屏幕


                                            <p><p>我目前正在设置这样的 WebView 的布局约束:</p>

<pre><code>UIView *theView = self.view;
UILayoutGuide *theGuide = theView.safeAreaLayoutGuide;

inWebView.translatesAutoresizingMaskIntoConstraints = NO;
.active = YES;
.active = YES;
.active = YES;
.active = YES;
</code></pre>

<p>当 View 在 iPhone X 上以横向模式显示时,这会导致左右边距。 WebView 在 View 中水平居中。这在以下草图中显示为 (1)
<a href="/image/xzR52.png" rel="noreferrer noopener nofollow"><img src="/image/xzR52.png" alt="enter image description here"/></a>
WebView 被绘制为绿色区域的位置。 </p>

<p>但我想使用 View 的最大宽度,其中 WebView 延伸到右侧 (2) 或左侧 (3)。这将需要一个动态布局指南来引导和尾随。</p>

<p>我怎样才能做到这一点?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我通过添加更多约束找到了解决方案:</p>

<pre><code>@property (nonatomic, strong) NSLayoutConstraint *leftFullConstraint;
@property (nonatomic, strong) NSLayoutConstraint *rightFullConstraint;
</code></pre>

<p>并初始化 View 约束:</p>

<pre><code>UIView *theView = self.view;
UILayoutGuide *theGuide = theView.safeAreaLayoutGuide;
NSLayoutConstraint *theConstraint;

inWebView.translatesAutoresizingMaskIntoConstraints = NO;
.active = YES;
theConstraint = ;
theConstraint.priority = UILayoutPriorityDefaultHigh;
theConstraint.active = YES;
theConstraint = ;
theConstraint.priority = UILayoutPriorityDefaultHigh;
theConstraint.active = YES;
.active = YES;

self.leftFullConstraint = ;
self.rightFullConstraint = ;
</code></pre>

<p>注意:新的约束使用左右而不是前后,因为书写方向无关!它们比保存区域布局指南的约束具有更高的优先级。因此,当应用程序激活它时,它们将覆盖对安全区域的约束。</p>

<p>最后,当 trait 集合发生变化时,约束也会更新:</p>

<pre><code>- (void)updateConstraints {
    UIDeviceOrientation theOrientation = [ orientation];

    switch (theOrientation) {
      case UIDeviceOrientationLandscapeLeft:
            self.leftFullConstraint.active = NO;
            self.rightFullConstraint.active = YES;
            break;
      case UIDeviceOrientationLandscapeRight:
            self.leftFullConstraint.active = YES;
            self.rightFullConstraint.active = NO;
            break;
      default:
            self.leftFullConstraint.active = NO;
            self.rightFullConstraint.active = NO;
    }
}

- (void)traitCollectionDidChange:(UITraitCollection *)inPreviousTraitCollection {
    ;
    ;
}
</code></pre>

<p><strong>Swift 4</strong> 也是如此。定义属性:</p>

<pre><code>var leftFullConstraint: NSLayoutConstraint?
var rightFullConstraint: NSLayoutConstraint?
</code></pre>

<p>初始化约束:</p>

<pre><code>if let theView = self.view {
    let theGuide = theView.safeAreaLayoutGuide
    var theConstraint: NSLayoutConstraint!

    inWebView.translatesAutoresizingMaskIntoConstraints = false
    theView.topAnchor.constraint(equalTo: inWebView.topAnchor).isActive = true
    theConstraint = theGuide.leadingAnchor.constraint(equalTo: inWebView.leadingAnchor)
    theConstraint.priority = UILayoutPriorityDefaultHigh
    theConstraint.isActive = true
    theConstraint = theGuide.trailingAnchor.constraint(equalTo:inWebView.trailingAnchor)
    theConstraint.priority = UILayoutPriorityDefaultHigh
    theConstraint.isActive = true
    theView.bottomAnchor.constraint(equalTo: inWebView.bottomAnchor).isActive = true

    self.leftFullConstraint = theView.leftAnchor.constraint(equalTo: inWebView.leftAnchor)
    self.rightFullConstraint = theView.rightAnchor.constraint(equalTo: inWebView.rightAnchor)
}
</code></pre>

<p>并更新它们:</p>

<pre><code>func updateConstraints() {
    if let leftFullConstraint = self.leftFullConstraint,
       let rightFullConstraint = self.rightFullConstraint {
      let theOrientation = UIDevice.current.orientation

      switch(theOrientation) {
      case .landscapeLeft:
            leftFullConstraint.isActive = false
            rightFullConstraint.isActive = true
            break;
      case .landscapeRight:
            leftFullConstraint.isActive = true
            rightFullConstraint.isActive = false
            break
      default:
            leftFullConstraint.isActive = false
            rightFullConstraint.isActive = false
      }
    }
}

override func traitCollectionDidChange(_ inPreviousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(inPreviousTraitCollection)
    updateConstraints()
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 iPhone X 上横向使用最大屏幕,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/48418441/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/48418441/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 iPhone X 上横向使用最大屏幕