菜鸟教程小白 发表于 2022-12-13 11:45:22

ios - 自动布局:UIImageView 不随设备方向旋转


                                            <p><p>可能有十几个标题相似的 SO 问题,据我所知,我已经采纳了他们每个人的建议,但没有运气。当我将设备从纵向旋转到横向时,我想更改背景图像。但是,在我尝试过的每个实验中,横向的 UIImageView 都保持纵向大小。</p>

<p>我正在使用自动布局,在 IB 中配置如下:</p>

<p> <a href="/image/GPMV8.png" rel="noreferrer noopener nofollow"><img src="/image/GPMV8.png" alt="autolayout"/></a> </p>

<p>我的 View 层次结构是这样配置的:</p>

<p> <a href="/image/E7wDp.png" rel="noreferrer noopener nofollow"><img src="/image/E7wDp.png" alt="enter image description here"/></a> </p>

<p>当我旋转设备时,我想旋转 UIView <code>viewBackground</code> 中的所有内容(图像和所有按钮)。我相信我可以通过约束来管理按钮的移动,但需要自己旋转 UIImageView <code>image view background</code>。所以,我添加了以下代码:</p>

<pre><code>-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id&lt;UIViewControllerTransitionCoordinator&gt;)coordinator
{
    int scaleFactor = self.traitCollection.displayScale;
    NSString *source = @&#34;drawn&#34;;

    NSString *orientation;
    if (size.width &gt; size.height)
    {
      orientation = @&#34;Landscape&#34;;
    }
    else
    {
      orientation = @&#34;Portrait&#34;;
    }

    NSString *platform;
    if ([ userInterfaceIdiom] == UIUserInterfaceIdiomPad)
    {
      platform = @&#34;iPad&#34;;
    }
    else
    {
      platform = @&#34;iPhone&#34;;
    }

    NSString *filename = ;
// CONFIRMED: we have assembled the correct new image name.

   viewBackground.frame = CGRectMake(0, 0, size.width * scaleFactor, size.height * scaleFactor);
    viewBackground.autoresizesSubviews = YES;
    viewBackground.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    imageViewBackground.autoresizesSubviews = YES;
    imageViewBackground.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    imageViewBackground.image = ;
}
</code></pre>

<p><strong>问题:</strong>正确的图像出现在屏幕上,但如上所述,它仍然具有纵向尺寸。我敢肯定,随着艺术品的显着不同,图像会发生变化,元素是水平堆叠还是垂直堆叠。但是新图片在横向模式下被水平切断。 </p>

<p>我尝试将各种百搭值放入 <code>newRect</code> 中,但它们都没有任何区别。即使我从根本上改变 <code>newRect</code> 中的原点,图像也不会真正移动。所以我目前的理论是我对 View 大小的更改被忽略/覆盖。</p>

<p><strong>问题:</strong>我错过了什么阻止图像大小调整为横向模式?还有其他一些我没有解决的自动调整大小方面吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>因此,问题原来是传奇中的另一个变量。 UIImageView 上还必须有一个约束,每边都为 0,并且“未选中约束到边距”。显然,当我早先执行该步骤时,实际上并没有采取。</p>

<p>但我不得不承认,我真的不明白那个约束对我有什么作用。它显然使旋转起作用,但我不明白为什么。由于这在技术上是我最初问题的答案,如果有人能解释这个约束是如何实现这种情况的,我会很高兴地给予答案。</p>

<p><strong>编辑:</strong></p>

<p>万一将来有人偶然发现这个答案...我现在看到将上述约束设置为 UIImageView 和 UIView 之间的所有 0 缓冲区将 UIImageView 的边缘固定到 UIView 的边缘。当设备旋转时,viewController 会调整 UIView 的大小,并且在此约束下,UIImageView 也会调整大小。我能够删除我的大部分代码。我需要的唯一代码是选择纵向或横向图像,并且我能够删除调整 UIView 和 UIImageView 大小的所有内容。</p>

<p><strong>现在,图像在旋转时仅使用一个约束即可正确更改大小。</strong>我只需要代码来决定是显示横向还是纵向背景。 (我通过将图像存储在 Assets 目录中大大简化了该代码,因此代码只选择“肖像”或“风景”的名称,但图像的大小是根据设备自动选择的)。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 自动布局:UIImageView 不随设备方向旋转,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/33597363/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/33597363/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 自动布局:UIImageView 不随设备方向旋转