Xcode 6 beta 4,UIButton 在collectionviewcell 中不负责

Posted

技术标签:

【中文标题】Xcode 6 beta 4,UIButton 在collectionviewcell 中不负责【英文标题】:Xcode 6 beta4, UIButton is not responsable in collectionviewcell 【发布时间】:2014-07-29 06:08:27 【问题描述】:

我使用的是Xcode 6.0 beta 4,发现UICollectionViewCell中的按钮对点击没有反应。

详情如下:

UICollectionViewController

--- UICollectionViewCell

------UIButtonUIButton 有两个autolayout 约束,将UIButton 放在垂直中心,水平中心放在Cell

现在让cell 的大小类似于:(300, 1000)

在 iPhone 模拟器或 ios 7.0 或 7.1.x 的设备上运行应用程序,按钮不可触摸,但在 iOS 8.0 模拟器中测试就可以了。 此外,如果我将单元格 size 更改为 (300, 200),按钮将起作用。

我认为这是 Xcode 测试版中的一个错误,对吧?

我可以在哪里将错误发送给 Apple?

【问题讨论】:

您可以通过此站点报告错误:developer.apple.com/bug-reporting Autoresizing issue of UICollectionViewCell in Storyboard prototype cell (Xcode 6 Beta 3 deploying to iOS 7)的可能重复 【参考方案1】:

他们忘记为 UICollectionViewCell 的 contentView 设置 autoresizingMask

修复一下

self.contentView.autoresizingMask = UIViewAutoresizingFlexibleHeight |    UIViewAutoresizingFlexibleWidth;

【讨论】:

感谢 Alexey,它有效。我已经向苹果报告了这个错误【参考方案2】:

看起来这实际上不是一个错误,而是使用 Xcode 6 定位 iOS 7 设备的不兼容问题。ecotax's post 对此进行了更详细的描述,但这是来自 Apple DTS 的回复:

在 iOS 7 中,单元格的内容视图通过自动调整大小的掩码自行调整大小。在 iOS 8 中,这发生了变化,单元格停止使用自动调整大小的掩码,并开始在 layoutSubviews 中调整内容视图的大小。如果 nib 在 iOS 8 中编码,然后在 iOS 7 中解码,您将拥有一个没有自动调整大小掩码的内容视图,也没有其他方法可以调整自身大小。因此,如果您更改单元格的框架,内容视图将不会跟随。

部署回 iOS 7 的应用必须通过调整内容视图本身的大小、添加自动调整大小的掩码或添加约束来解决此问题。

上述 Alexey 的解决方案可以解决问题:

- (void)awakeFromNib

   // Fix for iOS 7 devices targeted using Xcode 6.
   self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

【讨论】:

以上是关于Xcode 6 beta 4,UIButton 在collectionviewcell 中不负责的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 6.2 beta 4 是不是使带有页面的 watchKit 接口无法打开推送的接口?

安装 XCode 6 beta 4 后无法运行旧的 swift 项目

Xcode 6 beta 4中的Swift有哪些改变?

Xcode 6 Beta 在 iPad 7.1 上运行时使用核心数据使应用程序崩溃

Xcode 6 Beta 项目与 Xcode 6 的兼容性

Xcode 6 无法在启用自动布局的情况下移动 UIButton