菜鸟教程小白 发表于 2022-12-12 11:17:50

iphone - iOS 自动布局 : Resizing container with constraints


                                            <p><p>我有一个 ScrollView ,里面有容器 View (<em>self.tagScrollContentView</em>)。那是在 Storyboard中。然后我生成按钮并以编程方式将它们放置在带有约束的容器 View 中。</p>

<pre><code>for(NSInteger i = 0; i &lt; allTags.count; i++) {
   UIButton *tagBt = [ initWithFrame:(CGRect){CGPointZero, tagSize.width + 30, 17}];
   ;

   ];

   if(prevBtRow1)
      ];
   else
      ];

   ];

   prevBtRow1 = tagBt;
}

;
;
</code></pre>

<p>此代码将所有按钮排成一行,具体取决于它们的宽度。一切正常。然后我需要放大 <em>tagScrollContentView</em> 以使所有按钮都在此 View 内而不是在边界之外。然后为我的滚动分配等于容器 View 的正确内容大小。
不幸的是,滚动无法正常工作。内容大小不适合容器 View 。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>关键问题是您的 <code>contentSize</code> 没有设置,因为您没有将最后一个按钮从最后一个按钮添加到其 superView 。您可以在最后添加一个约束,您的 <code>contentSize</code> 将自动调整:</p>

<pre><code>for (NSInteger i = 0; i &lt; allTags.count; i++) {
    UIButton *tagBt = [ init];
    tagBt.translatesAutoresizingMaskIntoConstraints = NO;
    ;

    // add all of your constraints

    prevBtRow1 = tagBt;
}

[constraintsArray addObject:[NSLayoutConstraint constraintWithItem:prevBtRow1
                                                         attribute:NSLayoutAttributeTrailing
                                                         relatedBy:NSLayoutRelationEqual
                                                            toItem:self.tagScrollContentView
                                                         attribute:NSLayoutAttributeTrailing
                                                      multiplier:1.0
                                                          constant:10.0]];

;
</code></pre>

<p>有几个不相关的问题:</p>

<ol>
<li><p>我假设您有一个 <code>tagBt.translatesAutoresizingMaskIntoConstraints = NO;</code> 行没有进入您的代码示例。</p></li>
<li><p>如果您要设置约束,那么执行 <code>initWithFrame</code> 毫无意义。 <code>init</code> 就足够了。</p></li>
<li><p>我建议您也为您的按钮添加一个高度约束,这样它的约束就会变得明确。</p></li>
<li><p>顺便说一下,您正在向 superView 添加按钮宽度约束。无论哪种方式,它都可以工作,但通常您向最近的公共(public)父级添加一个约束,对于宽度约束,这将是按钮本身,而不是它的父 View 。</p></li>
</ol></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - iOS 自动布局 : Resizing container with constraints,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/16759212/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/16759212/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - iOS 自动布局 : Resizing container with constraints