
它使用四个标签作为标题,时间戳,正文和页脚.每个视图都垂直固定在其上方的同级视图中,并锚定在父视图的左/右侧.所有标签都具有固定的高度,除了具有> =高度的主体和设置为0的行数,其中“自动换行”作为换行样式.父视图是UIScrollVIEw.
在iPhone上它看起来很好:
但是在iPad上它看起来像这样:
咦?身体标签中所有额外的垂直空间来自何处? xib及其视图控制器在iPhone和iPad之间是相同的(目前没有自定义的iPad代码).我发现垂直空间与标签渲染的换行数直接相关.如果没有线条包裹,则没有额外的垂直空间.如果只有几条线包裹,则会有一些额外的垂直空间.如果几乎每一条线都包裹起来,那就是它的样子.
首先是关于UILabel为什么会这样做的任何想法?
第二,如果我不能让它停止这样做我怎么能解决它?
我已经尝试了一些东西.如果我在-vIEwDIDLayoutSubVIEws中调用[bodyLabel sizetoFit],那么它会修复标签但不修复任何兄弟视图的布局(例如,页脚标签卡在屏幕底部而不是拉到下面身体).调用sizetoFit后,任何尝试让整个视图重新布局其子项的 *** 作都将被忽略.我还尝试通过基于字体计算高度来调整UILabel的大小,这导致与-sizetoFit相同的行为(尽管代码更多).
用UITextVIEw替换Body UILabel并不会给我带来奇怪的垂直间距问题,但是我需要手动计算UITextVIEw的高度(使用字体计算)以及在父UIScrollVIEw中调整UITextVIEw的大小使得UIScrollVIEw变得如此简单拒绝滚动(就好像它不知道它的内容对于它的边界来说太大了).
所以此刻我被困住了.即使只是解释为什么UILabel在iPad布局上采用这种方式行为也会有所帮助.
解决方法 主要的问题是自动调整Label内部文本大小的方法失败了,因为在iPad中你的Label从一开始就没有设置的宽度,它是在运行时计算出来的,这就是混乱的根源.在iPhone上,由于您的Label具有设定宽度(在IB上),因此没有任何问题.有两种方法可以解决这个问题:
>有两个故事板:一个用于iPhone,一个用于iPad
这样做会使你的Label从一开始就知道它的宽度,它就像在iPhone上一样.
>只有一个iPhone和iPad的故事板
您可以通过计算最适合其文本的大小来解决该问题,并且该结果通过代码向Label添加高度约束.要计算desiredSize,您可以使用以下公式计算宽度:当前视图的宽度 – (前导空间尾随空格).这是我的代码
CGSize desiredSize = [_bodyLabel sizeThatFits:CGSizeMake(self.vIEw.frame.size.wIDth-40,10)];Nsstring *visualContraint = [Nsstring stringWithFormat:@"V:[_bodyLabel(%.0f)]",desiredSize.height];[_bodyLabel addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:visualContraint options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil vIEws:NSDictionaryOfVariableBindings(_bodyLabel)]];
objective-c
总结以上是内存溢出为你收集整理的ios – 这个垂直间距来自UILabelView?全部内容,希望文章能够帮你解决ios – 这个垂直间距来自UILabelView?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)