【问题标题】:Cannot set clipToBounds on UITableViewCell's contentView in iOS 7.1无法在 iOS 7.1 中的 UITableViewCell 的 contentView 上设置 clipToBounds
【发布时间】:2014-04-18 16:32:20
【问题描述】:

iOS 7 的重新设计导致UITableViewCells 的视图层次结构发生变化。单元格的内容视图被封装在一个名为 UITableViewCellScrollView 的私有类中。

在 iOS 7 中,UITableViewCellScrollView 将 clipsToBounds 设置为 YES,UITableViewCellContentView 将 clipToBounds 设置为 NO。

在 iOS 7.1 中,UITableViewCellScrollView 将 clipsToBounds 设置为 NO,UITableViewCellContentView 将 clipToBounds 设置为 NO。

如果您在 iOS 7.1 中调用 [[self contentView] setClipsToBounds:YES],它会坚持下去吗?在单元格 UITableViewCellContentView 上调用 layoutSubviews 时,clipToBounds 再次设置为 NO。

[[self contentView] superview] setClipsToBounds:YES] 在 iOS 7.1 中工作并将 UITableViewCellScrollView 的 clipToBounds 设置为 YES,但这是一个非常脆弱的解决方案。

覆盖单元格上的 layoutSubview 并调用 [[self contentView] setClipsToBounds:YES] 有效,但这是另一种脆弱的解决方案。

有谁知道为什么要进行这种更改以及更强大的解决方案?

【问题讨论】:

  • 在单元格本身上将clipsToBounds 设置为YES 怎么样?它对我有用。
  • 这也可以。理想情况下,我不想告诉表格视图单元格剪裁到边界,以防 Apple 有任何计划因为基本 UITableViewCell 功能而使这些东西呈现在单元格之外。另一方面,内容视图除了总是驻留在单元格内,而且在 7.1 之前,默认情况下总是裁剪到边界。
  • 不,在内容滚动视图上将clipsToBounds 设置为YES 是一个错误!假设您希望您的内容出现在单元格之外。您将单元格和内容视图设置为不剪辑,但仍有一些内容正在剪辑!这是一个错误,也是 Apple 删除它的原因。如果您不希望内容从单元格中出来,请在单元格本身或其内容视图上设置剪辑。但你应该是设置它的人,而不是系统。
  • 是的,我同意滚动视图剪辑是一个错误。我希望能够在内容视图上设置 clipsToBounds 并将其粘贴,但这似乎已被破坏。

标签: ios uitableview uikit ios7.1


【解决方案1】:

我遇到了一些问题,我最终以一种丑陋的方式解决了这个困惑的问题。

// Create a subclass of UITableView
// Then override setClipsToBounds:
- (void)setClipsToBounds:(BOOL)clipsToBounds {
    [super setClipsToBounds:YES];
}

【讨论】:

    【解决方案2】:

    在 iOS 8 中,在 XIB 中检查单元格的“剪辑子视图”不起作用。

    起作用的是:

    - (void)awakeFromNib {
        [super awakeFromNib];
    
        // Initialization code
        self.clipsToBounds = YES;
    }
    

    【讨论】:

      【解决方案3】:

      这很烦人。我所做的是在 contentView 中添加一个大小相同(宽度为 autoresizingMask)的 UIView,将相关内容添加到该视图中,并将 clipsToBounds 设置为它。

      【讨论】:

        【解决方案4】:

        正如 cmets 中所讨论的,目前在 iOS7.1 中唯一的解决方案是在单元格本身上设置 clipsToBounds。

        【讨论】:

        • 如果您希望单元格内容在“编辑”(重新排序)模式下被剪切,则此方法不起作用。然后你需要 cell.contentView 剪辑到它的边界,并且如前所述,这一直被 iOS 关闭,大概是出于某种充分的理由。
        猜你喜欢
        • 1970-01-01
        • 2014-11-23
        • 1970-01-01
        • 1970-01-01
        • 2014-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多