菜鸟教程小白 发表于 2022-12-12 12:35:20

iOS自动布局: 3 column label layout,,中间列具有可变宽度


                                            <p><p>我正在尝试创建一些我认为使用 iOS 自动布局很容易的东西。我已经研究了几天,买了一本书,并尝试了各种关键字搜索组合。以前有人这样做过并且可以为我指明正确的方向吗?</p>

<p><strong>我想要 3 个 UILabel,按列排列,中间的一个(内容更多)根据 iPad 的方向可变宽度。</strong></p>

<p>我可以让它工作,但是一旦 iPad 从横向旋转到纵向(因此减少了中间标签的可用宽度),中间标签的内容就会被切断。
即中间标签高度不会调整大小。</p>

<p>这就是我想要实现的目标:
<img src="/image/WbF5W.png" alt="This is what I want to achieve"/> </p>

<p>旋转到纵向后:
<img src="/image/mUzQc.png" alt="Once you rotate to portrait"/> </p>

<p>这是我的约束和 View 层次结构:
<img src="/image/8YbCj.png" alt="Here are my constraints and View hierarchy"/> </p>

<p>如果我给中间的 UILabel 一个高度限制“小于或等于”250(它需要在窄纵向模式下显示所有内容的高度),一旦 iPad 回到横向,标签内容就会扩展以适应新的宽度,但也不再与两侧其他标签的顶部很好地对齐。</p>

<p>错误的垂直对齐方式
<img src="/image/vKRTp.png" alt="wrong alignment"/> </p>

<p>这是我对中间标签的限制
<img src="/image/BgV88.png" alt="constraints on middle label"/> </p>

<p>(高度等于 250 的优先级为 1,因为这是我无法摆脱的生成约束。)</p>

<p>我已经尝试了很多内容拥抱和抗压缩的组合,我确信这就是答案,即需要 UILabel 框架来拥抱内容。我显然不明白这一点。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>好的,在找到这个stackoverflow问题后终于想通了:
<a href="https://stackoverflow.com/a/16009707/1727125" rel="noreferrer noopener nofollow">Link to answer</a> <br/>
它现在按我希望的那样工作</p>

<p>我所要做的就是将换行符设置为“自动换行”并更新设备方向上的首选宽度,就像这样</p>

<pre><code>- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
    if (UIDeviceOrientationIsLandscape(interfaceOrientation)) {
      self.middleLabel.preferredMaxLayoutWidth = 600;
    } else {
      self.middleLabel.preferredMaxLayoutWidth = 314;
    }
}
</code></pre>

<p>所以,总而言之,它是增加内容拥抱、降低高度约束的优先级和更新设备方向上的 preferredMaxLayoutWidth 的组合。
尽管如此,将硬编码值放入布局代码中感觉不对。能想出更好的办法吗?</p></p>
                                   
                                                <p style="font-size: 20px;">关于iOS自动布局: 3 column label layout,,中间列具有可变宽度,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/17728573/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/17728573/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS自动布局: 3 column label layout,,中间列具有可变宽度