• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-12 12:35:20 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

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

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

这就是我想要实现的目标: This is what I want to achieve

旋转到纵向后: Once you rotate to portrait

这是我的约束和 View 层次结构: Here are my constraints and View hierarchy

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

错误的垂直对齐方式 wrong alignment

这是我对中间标签的限制 constraints on middle label

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

我已经尝试了很多内容拥抱和抗压缩的组合,我确信这就是答案,即需要 UILabel 框架来拥抱内容。我显然不明白这一点。



Best Answer-推荐答案


好的,在找到这个stackoverflow问题后终于想通了: Link to answer
它现在按我希望的那样工作

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

- (void)willAnimateRotationToInterfaceOrientationUIInterfaceOrientation)interfaceOrientation durationNSTimeInterval)duration {
    if (UIDeviceOrientationIsLandscape(interfaceOrientation)) {
        self.middleLabel.preferredMaxLayoutWidth = 600;
    } else {
        self.middleLabel.preferredMaxLayoutWidth = 314;
    }
}

所以,总而言之,它是增加内容拥抱、降低高度约束的优先级和更新设备方向上的 preferredMaxLayoutWidth 的组合。 尽管如此,将硬编码值放入布局代码中感觉不对。能想出更好的办法吗?

关于iOS自动布局: 3 column label layout,,中间列具有可变宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17728573/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap