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

iOS 8 UITableView 旋转错误

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

所以在 XCode 6 上编译了一个应用程序后,我注意到一个奇怪的错误,只有在 iOS 8 上运行时才会发生: UITableView 在更新其框架后采用了错误的inner 尺寸。

现在我将尝试解释确切的情况: 我们有一个侧边旋转的UITableView,它基本上是一个水平的UITableView。它通过 tableView.transform = CGAffineTransformMakeRotation(-M_PI/2); 发生。 现在在设置转换之后,然后设置它的框架 - 一切都很好。 但当然,在大多数情况下,系统会向父级发送另一个帧更改,因为它需要将父级设置为实际大小,而不是 XIB 大小或任何初始化大小。在那一刻 - 当我重新布局 subview ,包括表格 View 时 - 一切都出错了。 实际上,表格 View 的框架只是设置为包含 View 的 bounds,但是内部 ScrollView (在 iOS 8 中 UITableView 有另一个 UIScrollView 里面,叫做 UITableViewWrapperView。由于 UITableView 本身就是一个 UIScrollView,我不明白为什么他们需要另一个。 ..) 采用等于父宽度的“高度”。而“height”实际上是width属性,只是旋转了。

现在我们可以很容易地估计他们有一个错误,将内部 UIScrollView 的宽度与父 UITableView 的实际宽度相关联,这可能是通过阅读.frame.size.width 而不是 .bounds.size.width。 但奇怪的是,在调查UITableView的subviews的frame的时候,似乎都没有问题!所以一定是某处的渲染问题。

所以我们留下了一个顶部有空白间隙的水平表格,因为单元格的“高度”是 320 而不是 568,而单元格的“宽度”很好,设置为 320。

我很高兴听到其他遇到此问题的人(或来自 Apple)的消息,但我终于找到了解决方案并将其与问题一起发布在这里,以供我和其他人将来引用。



Best Answer-推荐答案


所以让它表现的改变,而不是这样做:

- (void)layoutSubviews
{
    tableView.frame = self.bounds;
}

我已重置转换,将框架设置为 UITableView 在转换后本地期望的范围,然后设置转换并设置正确的框架。这有点令人困惑,但在这里:

- (void)layoutSubviews
{
    if (UIDevice.currentDevice.systemVersion.floatValue >= 8.f)
    {
        // iOS 8 layout bug! Table's "height" taken from "width" after changing frame. But then if we cancel transform, set width/height to the final width/height, and rotate it and set to the virtual width/height - it works!

        CGRect rotatedFrame = self.bounds,
        unrotatedFrame = rotatedFrame;
        unrotatedFrame.size.width = rotatedFrame.size.height;
        unrotatedFrame.size.height = rotatedFrame.size.width;

        tableView.transform = CGAffineTransformIdentity;
        tableView.frame = unrotatedFrame;
        tableView.transform = CGAffineTransformMakeRotation(-M_PI / 2);
        tableView.frame = rotatedFrame;
    }
    else
    {
        tableView.frame = self.bounds;
    }
}

关于iOS 8 UITableView 旋转错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26230928/

回复

使用道具 举报

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

本版积分规则

关注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