UITableView 的子视图永远不会出现

Posted

技术标签:

【中文标题】UITableView 的子视图永远不会出现【英文标题】:UITableView's subview never shows up 【发布时间】:2014-09-11 13:29:59 【问题描述】:

我正在尝试向UITableView 添加子视图(是的,不是UITableViewCell,而是UITableView)。它永远不会显示出来。起初我以为我添加得太早了,它被细胞覆盖了,但事实并非如此。当所有单元格都已添加时,我尝试延迟添加它,我尝试将它放在前面,我尝试将视图添加到 tableview 的子视图,但一切都是徒劳的,它永远不会出现。这是我的代码:

func delay(delay:Double, closure:()->()) 
    dispatch_after(
        dispatch_time(
            DISPATCH_TIME_NOW,
            Int64(delay * Double(NSEC_PER_SEC))
        ),
        dispatch_get_main_queue(), closure)


override func viewDidAppear(animated: Bool)

    super.viewDidAppear(animated)

    func c()
    
        var v:UIView = UIView(frame:CGRectMake(0.0, 0.0, 40.0, 40.0))
        v.backgroundColor = UIColor.greenColor()
        v.center = CGPointMake(40.0, 40.0)
        tableView!.addSubview(v)
        tableView!.bringSubviewToFront(v)
    

    delay(5.0, closure: c)

有什么想法吗?这个问题显然与 Swift 有关,因为在 Objective-C 中它不会重现

【问题讨论】:

您的代码对我有用(绿色视图在 5 秒延迟后显示)。你确定 tableView 不是 nil 吗?如果我摆脱了延迟并将您在 func c() 中的代码移动到 viewDidLoad (在 Swift 中),它也可以工作。 @rdelmar 嗯,这很有趣。我 100% 确定 table view 不是 nil,好的,谢谢 【参考方案1】:

首先

我在UITableViewController 中尝试这个

- (void)viewDidLoad 
    [super viewDidLoad];

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    view.backgroundColor = [UIColor redColor];
    [self.view addSubview:view];

有效

第二

我注意到您使用CGRectMake(0.0, 0.0, 40.0, 40.0) 添加了一个视图。因此,如果您的视图控制器中有一个视图,则该视图可能位于导航栏下方

【讨论】:

可能是 Swift 的问题,因为 Objective-C 工作正常

以上是关于UITableView 的子视图永远不会出现的主要内容,如果未能解决你的问题,请参考以下文章

UITableView,如何修复页脚,使其在滚动时永远不会向上或向下移动?

UITableView 作为 NIB 中的子视图的问题

uiview 作为包含 uitableview 的子视图

UIButton 永远不会在 UIImageView 的框架区域内响应

UITableView 内存问题

tableView:cellForRowAtIndexPath: 永远不会被调用