菜鸟教程小白 发表于 2022-12-13 12:27:03

ios - UILabel 获取底部空间约束 - 自动布局


                                            <p><p>我在 <code>UITableView</code> 中有多个原型(prototype)单元格。现在在其中一个单元格中,我有一个带有 <code>top</code>、'bottom'、<code>leading</code> 和 <code>trailing</code> 约束的 UILabel。我希望以编程方式修改 <code>bottom</code> 约束。如何在我的代码中评估此约束?</p>

<p>我已经在 <code>xib</code> 中为这个约束赋予了 <code>identifier</code>,但是当我执行 <code>lbl.constraints</code> 时,我只得到了以下约束的数组:</p>

<pre><code> po lbl.constraints
&lt;__NSArrayI 0x7f987fb81a60&gt;(
&lt;NSContentSizeLayoutConstraint:0x7f987faca450 H: Hug:251 CompressionResistance:750&gt;,
&lt;NSContentSizeLayoutConstraint:0x7f987faca4b0 V: Hug:251 CompressionResistance:750&gt;
)
</code></pre>

<p>为什么没有显示尾随、前导、底部和顶部约束?我哪里错了?我该如何解决?</p>

<p><strong>编辑(未反射(reflect)约束更改)</strong></p>

<pre><code>-(IBAction)btnShowCtrl_click:(id)sender{
    FormTableViewCell *cell = (FormTableViewCell *) count]+4]];

    if(cell.nlcTextField.priority == 999){
      cell.nlcLabel .priority = 999;
      cell.nlcTextField.priority = 500;
    } else {
      cell.nlcLabel .priority = 500;
      cell.nlcTextField.priority = 999;
    }

    [UIView animateWithDuration:.5 animations:^{
//      self.orangeView.alpha = 0;
      ;
       count]+4]] withRowAnimation:UITableViewRowAnimationNone];
      ;
      ;
    }];
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我建议为您的单元格创建一个 <code>UITableViewCell</code> 子类。例如,如果你只有一个标签,并且你想要一个底部约束的导出,它可能看起来像:</p>

<pre><code>//CustomCell.h

#import &lt;UIKit/UIKit.h&gt;

@interface CustomCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UILabel *customLabel;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *bottomConstraint;

@end
</code></pre>

<p>和</p>

<pre><code>//CustomCell.m

#import &#34;CustomCell.h&#34;

@implementation CustomCell

// intentionally blank

@end
</code></pre>

<p>然后,将其指定为原型(prototype)的基类:</p>

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

<p>那么你不仅可以将 socket 连接到标签,还可以连接底部约束:</p>

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

<p>然后在您的 <code>cellForRowAtIndexPath</code> 中,您不仅可以避免使用 <code>tag</code> 引用(只需使用您连接的 <code>customLabel</code>socket ),而且您也可以引用底部约束:</p>

<pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    CustomCell *cell = ;

    cell.customLabel.text = @&#34;Foo&#34;;
    cell.bottomConstraint.constant = 100;

    return cell;
}
</code></pre>

<p>顺便说一句,如果您正在修改底部约束,您可能想告诉表格 View 它应该根据约束自动调整单元格的大小,例如在 <code>viewDidLoad</code> 中:</p>

<pre><code>- (void)viewDidLoad {
    ;

    self.tableView.estimatedRowHeight = 44;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
}
</code></pre>

<p>有关详细信息,请参阅 WWDC 2014 视频 <a href="https://developer.apple.com/videos/play/wwdc2014-226/" rel="noreferrer noopener nofollow">What&#39;s New in Table and Collection Views</a> .</p>

<p>(对于 Swift 版本,请参阅此问题的修订历史记录。)</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UILabel 获取底部空间约束 - 自动布局,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34194184/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34194184/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UILabel 获取底部空间约束 - 自动布局