菜鸟教程小白 发表于 2022-12-12 16:18:31

ios - 自动布局错误无法同时满足 UIScrollView 的约束


                                            <p><p>我有一个 UIScrollView 来显示 UIImageViews。 ImageViews 在运行时根据用户先前保存的图像数量以编程方式插入。我收到以下错误:</p>

<blockquote>
<p>Unable to simultaneously satisfy constraints.</p>

<p>Probably at least one of the constraints in the following list is one
you don&#39;t want. Try this: (1) look at each constraint and try to
figure out which you don&#39;t expect; (2) find the code that added the
unwanted constraint or constraints and fix it. (Note: If you&#39;re seeing
NSAutoresizingMaskLayoutConstraints that you don&#39;t understand, refer
to the documentation for the UIView property
translatesAutoresizingMaskIntoConstraints)</p>

<pre><code>&#34;&lt;NSLayoutConstraint:0x17029cd90 H:-(0)-|   (Names: &#39;|&#39;:UIScrollView:0x15cd326b0 )&gt;&#34;,
&#34;&lt;NSLayoutConstraint:0x17029d060 UIScrollView:0x15cd326b0.trailingMargin == UIView:0x15cd31e70.trailing&gt;&#34;
</code></pre>
</blockquote>

<p>我做了基本的自动布局, ScrollView 在 0 点处固定在所有四个边上。然后我添加一个 contentView 作为 UIScrollView 的 subview (普通 UIView),它也固定在 0 点的所有四个边上。 </p>

<p>编辑 Storyboard 约束图像</p>

<p> <a href="/image/7S6mt.png" rel="noreferrer noopener nofollow"><img src="/image/7S6mt.png" alt="storyboard constraints on UIScrollview set to 0 on all sides to superview with Descendent constraints set to 0 to contentView "/></a> </p>

<p>我在代码中给 contentView 一个宽度,如下所示:</p>

<pre><code>    CGSize pagesScrollViewSize = self.scrollView.frame.size;

      NSDictionary *views   = @{ @&#34;contentView&#34;       :   self.contentView};

      NSDictionary *metrics   = @{ @&#34;width&#34;         :   @(pagesScrollViewSize.width * self.mutableArray.count) };

      NSArray *constraints;
      constraints = -|&#34; options:0 metrics:metrics views:views];
      ;

;
</code></pre>

<p>UIImageViews 的添加方式是这样的,UIImageViews 的添加是根据发生到 ViewController 的 segue 时设置的页数来添加的。 </p>

<pre><code>-(void)loadVisiblePages{

      CGRect frame = self.scrollView.bounds;
      frame.origin.x = frame.size.width * self.page;
      frame.origin.y = 0.0f;

      ImageForArchiving *newImageObject = (ImageForArchiving*)self.mutableArray;
      UIImage *imageForNewPageView = newImageObject.image;

      UIImageView *newPageView = [ initWithFrame:frame];
      ;
         newPageView.contentMode = UIViewContentModeScaleAspectFit;
      newPageView.image = imageForNewPageView;
      ;

      ;
    }
}
</code></pre>

<p>此外,当我滚动 UIScrollView 时,显示的图像会在旋转时不规则地改变大小。我认为这只是上述警告的结果以及我尚未布置 UIImageViews 的事实。在这种情况下,上述警告是什么意思,我该如何解决?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您似乎已将 scrollView 的 trailingMargin 固定到 contentView.trailing。
将此约束的 scrollView.Trailing Margin 更改为 scrollView.Trailing
选择约束后,您可以在 Storyboard 的事件检查器中执行此操作。</p>

<p>或者,清除 contentView 上的所有约束。然后在再次添加固定约束时取消选中 <code>Constrain to margins</code> 并将所有常量设置为 0。</p>

<p><strong>与</strong></p>

<p>在你的代码中改变这一行</p>

<pre><code>NSArray *constraints;
    constraints = -|&#34; options:0 metrics:metrics views:views];
    ;
</code></pre>

<p>用这个:</p>

<pre><code>NSArray *constraints;
    constraints = |&#34; options:0 metrics:metrics views:views];
    ;
</code></pre>

<p>在视觉格式中使用 <code>@"H:|--|"</code> 意味着将您的 contentView 固定到 superView 的边距,并在 superView 和 subView 之间添加 8 pts 的空间。在您的 Storyboard约束中,您已经使用 UIScrollView 的 Trailing 和 Leading edge 设置了约束,而在以编程方式添加的约束中,您使用了 Trailing Margin 和 Leading Margin(有点要求 contentView 保持 8 pt. padding)。因此,冲突。</p>

<p>检查视觉格式语法<a href="https://developer.apple.com/library/prerelease/ios/documentation/UserExperience/Conceptual/AutolayoutPG/VisualFormatLanguage.html#//apple_ref/doc/uid/TP40010853-CH27-SW1" rel="noreferrer noopener nofollow">here</a> .</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 自动布局错误无法同时满足 UIScrollView 的约束,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/32730218/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/32730218/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 自动布局错误无法同时满足 UIScrollView 的约束