【问题标题】:When is preferredContentSize respected?何时尊重 preferredContentSize?
【发布时间】:2014-10-28 15:19:54
【问题描述】:

我有一个表格视图控制器,它在viewDidLoad 之后设置它的内容。设置新内容时,我计算preferredContentSize。在呈现弹出框之前,我可以查询我的视图控制器的preferredContentSize,这是正确的。但是在演示之后,我得到了弹出框的标准尺寸(320x480)。如果我将setPopoverContentSize:animated: 与之前查询的值一起使用,则一切正常。

我现在的问题是为什么它一开始就不尊重preferredContentSize?我做错了什么?

【问题讨论】:

    标签: ios uitableview uipopovercontroller


    【解决方案1】:

    现在我又遇到了同样的问题。如果我把我的桌子高度计算到viewWillAppear 中,它就会起作用:

    public override void ViewWillAppear (bool animated)
    {
        base.ViewWillAppear (animated);
    
        TableView.LayoutIfNeeded ();
        this.PreferredContentSize = new SizeF (320f, TableView.ContentSize.Height);
    }
    

    代码在 C# 中,但您可以轻松地将其转换为 Objective-C 或 Swift。

    【讨论】:

    • 这个解决方案非常适合我。谢谢 :D:D:D:D
    • 在 ViewWillAppear() 中这样做并不完全正确,因为表格尚未绘制并且不知道其大小(以及单元格的大小)。所以 TableView.LayoutIfNeeded 是没用的,除非你的表格有恒定的单元格高度并相应地设置。
    • @CynichniyBandera:你建议什么?应该在哪里调用?
    • @testing 一个普遍的建议是在 viewDidLayoutSubviews() 代码路径中,当视图及其子视图已经获得它们的实际大小(包括本地化字符串、带有省略号的截断标签等) PS。你不需要重新布置你的桌子。在 viewDidLayoutSubviews() 中它已经更新了。
    • @CynichniyBandera:感谢您的回复。听起来很合理。下次遇到这个问题我会试试的。如果需要,请随时添加答案:)
    【解决方案2】:

    我将测试代码转换为 Swift 2.0。

    override func viewWillAppear(animated: Bool) {
       super.viewWillAppear(animated)
       tableView.layoutIfNeeded()
       preferredContentSize.height = tableView.contentSize.height
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 2019-06-17
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 2017-11-28
      • 2013-03-22
      相关资源
      最近更新 更多