iOS8使用Interface Builder自行调整静态TableView单元格大小

概述我很高兴能够在Xcode中构建我的静态TableView,使用自动布局来支持动态类型,如 WWDC2014 What’s New in Table and Collection Views所述. 我更喜欢严格使用Xcode / Interface Builder和故事板来处理自动布局.当我这样做时,不知何故TableView单元格没有调整大小,我确信我错过了一些简单的东西. 为了重现这一点,使用X 我很高兴能够在Xcode中构建我的静态tableVIEw,使用自动布局来支持动态类型,如 WWDC2014 What’s New in Table and Collection Views所述.

我更喜欢严格使用Xcode / Interface Builder和故事板来处理自动布局.当我这样做时,不知何故tableVIEw单元格没有调整大小,我确信我错过了一些简单的东西.

为了重现这一点,使用Xcode 7 beta 5,我:

>创建了一个新的单一视图项目.
>将Storyboard入口点设置为新的UItableVIEwController.
>使其成为具有分组样式的静态表视图.
>在第一行添加了一个标签.添加了顶部,底部,左侧和右侧的约束.
>将标签字体设置为“正文”.
>添加到VIEwDIDLoad:

self.tableVIEw.rowHeight = UItableVIEwautomaticDimension;
self.tableVIEw.estimatedRowHeight = 44.0;
>将其调整并调整设置中的动态类型.字体更改时,tableVIEw高度仍然停留在明显的默认值44并截断标签.

这是上面的结果GitHub repository.

为什么auto Layout不会导致tableVIEw扩展以填充必要的空间以适应新的更大标签文本?

我已经找到关于这个主题的好帖子,如下所示,并且倾向于使用代码来设置约束here.

我没有在纯Interface Builder中找到任何这样做的例子.当然这很有可能吗?

更新

我已经更新了GitHub源代码,以包含一个带有ImageVIEw而不是UILabel的第二个表行;它显示了同样的问题:

此外,当我在标签或图像视图上设置显式高度约束时,我生成以下内容.问题似乎是我没有设置的“UIVIEw-Encapsulated-Layout-Height”约束.我猜它是生成的,因为在我的IB静态表视图中,行高被设置为(默认)为44.

Unable to simultaneously satisfy constraints...."<NSLayoutConstraint:0x7fa371f39e30 V:[UILabel:0x7fa371f38d30'Label'(20)]>","<NSLayoutConstraint:0x7fa371c39160 UILabel:0x7fa371f38d30'Label'.top == UItableVIEwCellContentVIEw:0x7fa371e17dc0.topmargin>","<NSLayoutConstraint:0x7fa371c393c0 UItableVIEwCellContentVIEw:0x7fa371e17dc0.bottommargin == UILabel:0x7fa371f38d30'Label'.bottom>","<NSLayoutConstraint:0x7fa371f41a40 'UIVIEw-Encapsulated-Layout-Height' V:[UItableVIEwCellContentVIEw:0x7fa371e17dc0(43.5)]>"

但是VIEwDIDLoad中的这个不应该超越这个吗?

self.tableVIEw.rowHeight = UItableVIEwautomaticDimension;self.tableVIEw.estimatedRowHeight = 44.0;

自行调整表格视图单元格是否不适用于静态表格视图?

更新2

我使用动态原型而不是静态表视图构建相同的东西,一切正常:

它确实似乎是静态的与动态原型表.静态表视图单元格未正确展开.

我在WWDC视频中没有看到动态与静态的关系,所以在这一点上我将这个问题搞砸了.如果我学到新东西,我会更新.

我已经更新了上面的GitHub存储库,以显示静态(损坏)和动态(工作)表视图的示例.

解决方法 回答:

这是Xcode7b5中的一个错误.我刚刚通过遵循Xcode 6.4和Xcode 7b5中的相同步骤来确认这一点.

>创建新的单一视图应用程序
>新文件. Cocoa类“MyStatictableVIEwController”,UItableVIEwController的子类.
>在Storyboard中,拖动新的表视图控制器.
>将类更改为MyStatictableVIEwController.
>将故事板入口点拖到新VC.
>删除原始VC.
>将类更改为MyStatictableVIEwController以获取新VC.
>选择表视图.将内容更改为静态单元格并将样式更改为分组.
>将新标签拖到第一个表视图单元格.将字体更改为正文.将顶部,左侧,右侧约束设置为0并更新帧.
>在MyStatictableVIEwController.m中,添加:

06000

>使用动态类型验证增加大小会导致表格行也展开.

由Xcode 6.4创建的项目按预期工作 – 表格视图单元格扩展以适合标签.

由Xcode 7b5创建的项目失败,如原始问题中所述.

有趣的是,如果使用Xcode7打开Xcode6项目,它也可以正常工作.这与Xcode7如何创建项目或故事板有关.

更新

我将.storyboard文件相互比较,并在tableVIEw条目下的破碎的Xcode7b5中,有一个rect定义:

<rect key="frame" x="0.0" y="0.0" wIDth="600" height="600"/>

我删除了这一行,似乎表视图单元格现在正确自我调整大小!

更新2

关键问题似乎是XML文件中每个“tableVIEwCell”条目下面的“rect”条目.重击那些是解决这个问题的方法.

更新3

提起雷达:

“Engineering已确定您的错误报告(22311571)与另一个问题(17995201)重复,并将被关闭.”

总结

以上是内存溢出为你收集整理的iOS8使用Interface Builder自行调整静态TableView单元格大小全部内容,希望文章能够帮你解决iOS8使用Interface Builder自行调整静态TableView单元格大小所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1066267.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存