在 iOS 13 和 xcode 11 中,tableview 单元格的“setSelected”方法不返回完美的单元格大小

Posted

技术标签:

【中文标题】在 iOS 13 和 xcode 11 中,tableview 单元格的“setSelected”方法不返回完美的单元格大小【英文标题】:"setSelected" method of tableview cell not return perfect size of cell in iOS 13 and xcode 11 【发布时间】:2019-10-08 10:46:26 【问题描述】:

实际上,我有一个在 tableview 单元格内的视图上应用阴影。该视图的高度是动态的(基于内容)意味着表格视图单元格是自身大小的单元格。在 ios 13 和 xcode 11 之前,我的代码可以完美运行,因为 tableview 单元格的“setSelected”方法返回单元格所有子视图的完美大小。在 iOS 13 和 xcode 11 中,tableview 单元格的“setSelected”方法返回的所有子视图的大小与 xib 中设置的相同。

使用下面的代码在视图上应用阴影:-

// Below method return correct size of view_margin (UIView) after content update in xcode 12 , but in xcode 13 below method return view_margin size same as size define in xib means not update size based on content 
// Below method is tableview cell method
- (void)setSelected:(BOOL)selected animated:(BOOL)animated 

    UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:self.view_margin.bounds];
    self.view_margin.layer.shadowColor = [UIColor blackColor].CGColor;
    self.view_margin.layer.shadowOffset = CGSizeMake(0.0, 2.0);
    self.view_margin.layer.shadowOpacity = 0.2;
    self.view_margin.layer.shadowPath = shadowPath.CGPath;
    self.view_margin.layer.masksToBounds = NO;

此问题仅在 xcode 11 和 iOS 13 中出现

【问题讨论】:

这在 ios 13 之前的版本中是否有效?如果在 IOS 13 之后视图的层次结构可能发生了变化,您将不得不遍历子视图,然后设置属性 @AnjulaS。是的,在 iOS 13 之前它可以正常工作。如果您有任何链接或代码,请帮助我。 @AnjulaS。您对上述问题有任何解决方案吗?请尽快帮助我。 你能告诉我你现在在哪里使用setSelected吗? @AnjulaS。我已经更新了我的问题。请检查一下。 【参考方案1】:

试试这个:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 


    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC));
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void)

            UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:self.view_margin.bounds];
            self.view_margin.layer.shadowColor = [UIColor blackColor].CGColor;
            self.view_margin.layer.shadowOffset = CGSizeMake(0.0, 2.0);
            self.view_margin.layer.shadowOpacity = 0.2;
            self.view_margin.layer.shadowPath = shadowPath.CGPath;
            self.view_margin.layer.masksToBounds = NO;

    );


【讨论】:

以上是关于在 iOS 13 和 xcode 11 中,tableview 单元格的“setSelected”方法不返回完美的单元格大小的主要内容,如果未能解决你的问题,请参考以下文章

iOS 13:带有 LeftView 间距问题的 UITextField - Xcode 11

iOS 13 和 Xcode 11 中的配置文件问题中缺少 NFC 标签协议

我的问题是我无法在 ios 13 和 xcode 11 中发出任何网络请求

在 iOS13 + xcode 11 中隐藏导航栏

在 iOS 13 和 xcode 11 中,tableview 单元格的“setSelected”方法不返回完美的单元格大小

为啥 UICollectionView 在 Xcode 11 (ios 13) 中省略 Line/Intrim 间距?