ios - ViewWithTag 从 iOS 8 开始不再有效? swift

标签 ios swift uicollectionview ios8

我刚刚下载了新的 Xcode GM,在解决了大量错误之后,我的 swift 项目完美运行(耶!)。但是今天我尝试在 iOS 8 设备上安装该应用程序,现在我所有的表格和 Collection View 都破坏了该应用程序。麻烦来自这样的事情:

let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CollectionCellCB", forIndexPath: indexPath) as UICollectionViewCell

var pic = cell.contentView.viewWithTag(10) as UIImageView
pic.image = DisplayImage;

我已经仔细检查了我的 Storyboard,以确保我有一个带有该重用标识符的单元格和一个带有该标签的 uiimage View ,但它在这里和其他场景中都不起作用。 它在我的 iOS 7 设备上工作得很好,但在 iOS 8 上每次都会中断。我希望这是一个错误,但我不能确定。还有其他人遇到此问题或知道如何解决吗?

主要问题是,当我调用 viewWithTag 时,该函数返回 nil 而不是像在 iOS 7 和更早版本中那样返回对 View 的引用。

最佳答案

我遇到了同样的问题。有些单元格不显示任何内容是 iOS8。 viewWithTag 未返回 subview 。

似乎是单元格未正确创建且 subview 不存在。下面是两个具有不同标识符的单元格的内容 - 第一个已损坏,第二个正在运行:

(lldb) po [cell recursiveDescription]
<tSettingsViewCell: 0x7a5d7950; baseClass = UITableViewCell; frame = (0 0; 695 44); text = 'WiFi'; opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7a5d7af0>>
   | <_UITableViewCellSeparatorView: 0x7a5d77f0; frame = (15 43; 680 1); layer = <CALayer: 0x7a5d8500>>

(lldb) po [cell recursiveDescription]
<tSettingsViewCell: 0x7a430210; baseClass = UITableViewCell; frame = (0 0; 695 44); text = 'Server'; opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7a4301e0>>
   | <UITableViewCellContentView: 0x7a430170; frame = (0 0; 669 44); clipsToBounds = YES; opaque = NO; gestureRecognizers = <NSArray: 0x7a429850>; layer = <CALayer: 0x7a430140>>
   |    | <UITableViewLabel: 0x7a430080; frame = (15 0; 645 44); text = 'Server'; clipsToBounds = YES; opaque = NO; layer = <_UILabelLayer: 0x7a430030>>
   |    | <UITextField: 0x7a42f980; frame = (495 8; 185 30); text = ''; clipsToBounds = YES; opaque = NO; autoresize = RM+BM; tag = 200; layer = <CALayer: 0x7a42fce0>>
   | <_UITableViewCellSeparatorView: 0x7a42ad10; frame = (15 43; 680 1); layer = <CALayer: 0x7a42aad0>>
   | <UIButton: 0x7a42a870; frame = (677 16; 8 13); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7a42a840>>
   |    | <UIImageView: 0x7a4295a0; frame = (0 0; 8 13); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7a429660>>

Storyboard未使用自动布局。

我还没弄清楚为什么会这样。

编辑:

原来自定义单元格过滤掉了顶部分隔符 View (没有将其添加到 subview ),这似乎破坏了一切。当所有 subview 都传递给 addSubview:(UIView*)view 中的 super 时,它又开始工作了。还是很神秘...

关于ios - ViewWithTag 从 iOS 8 开始不再有效? swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25797596/

相关文章:

ios - 如何摆脱键盘顶部的键

ios - 如何刷新 CollectionView 中单元格内的按钮?

ios - UIImagePickerController 在缩放时显示黑条 – 这是 iOS 中的错误吗?

ios - 在 iphone 模拟器上使用 UIImagePickerController

ios - 从 App 打开 map 返回 Nil 作为自定义点注释的位置标题

ios - Swift 中的 HTTP 发送请求参数

ios - 如何在 Swift 中更改 UICollectionView 的 targetContentOffset?

objective-c - UIActionSheet 只显示一次

iphone - Flurry 插页式广告出现不一致

ios - 解析具有特定条件的字符串