iOS中,UIViewController中的UITableView无法显示所有行 [Swift]

3
我在UIViewController中的UITableView遇到了一个bug。 我尝试解释一下我的情况和问题。
我有一个TabBarController,其中一个视图是带有UITableView的UIViewController。 我不使用UITableViewController,因为我的UIViewController上有一些特殊的控件。
所以,当我的UIViewController不是我的TabBarController的子代时,一切正常:所有行都正确显示。
但是,当我将我的UIViewController设置为我的TabBarController的子代时,出现了这个bug:只显示一部分行(准确的说是三分之一,在所有情况下)。
我只是不明白发生了什么。我的代码似乎是有效的,但只有当我的UIViewController不是我的TabBarController的子代时才能生效。
这种情况下是否有另一种添加方法?
这是我的UIViewController代码:
class ProfileController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var tableChallenges: UITableView!
    @IBOutlet weak var profileTabs: UISegmentedControl!

    var pageViewController : UIPageViewController!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableChallenges.dataSource = self
        self.tableChallenges.delegate = self

        self.tableChallenges.reloadData()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 5
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("challengeCustomCell", forIndexPath: indexPath) as! ChallengeCustomCell

        switch(self.profileTabs.selectedSegmentIndex) {
            case 0:
                cell.challengeSuccededOrFailedImage.hidden = true
            break

            case 1:
                cell.challengeSuccededOrFailedImage.hidden = false
                cell.challengeSuccededOrFailedImage.image = UIImage(named: "challenge-succeded")
            break

            case 2:
                cell.challengeSuccededOrFailedImage.hidden = false
                cell.challengeSuccededOrFailedImage.image = UIImage(named: "challenge-failed")
            break

            case 3:
                cell.challengeSuccededOrFailedImage.hidden = true
            break

            default: break

        }

        return cell
    }

    @IBAction func selectedItemChanged(sender: AnyObject) {
        self.tableChallenges.reloadData()
    }
}

感谢您提前回答!:)


我有完全相同的问题。无论是UICollectionView还是UITableView,都会发生这种情况。如果我将包含其中一个视图的ViewController嵌入在UITabBarController中,只有一些单元格包含Storyboard中指定的子视图。 - Sebastian Krogull
2个回答

1
自从MainStory板出现以来,我就不是它的粉丝了。那天晚上我遇到了同样的错误,我不得不摆脱我的View Controller并将View Controller制作成一个.xib文件。
  • 我从项目中删除了ViewController
  • 然后我去AppDelagate并添加了一个变量来创建自己的ViewController
    var viewController: ViewController?
  • return之前的didFinishLaunchingWithOptions:函数下

  • 我添加了以下代码
    self.window = UIWindow(frame:UIScreen.mainScreen().bounds) self.viewController = ViewController(nibName:"ViewController",bundle:nil) var navController = UINavigationController(rootViewController: self.viewController!) navController.navigationBarHidden = true self.window?.rootViewController = navController self.window?.makeKeyAndVisible()

基本上,在绘制窗口框架之后,我们创建了ViewController并将其嵌入导航控制器中,然后将导航控制器设置为窗口的根视图。

那么,您需要创建一个xib文件,选择IOS/User Interface,命名为ViewController并创建。然后,您可以添加UITableView Controller,一切都应该正常工作。

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Lodoss

1

很抱歉长时间没有回复。

我终于找到了解决我的问题的方法。我将包含UITableViewUIViewController嵌入了一个UINavigationController中。经过一些研究,这似乎是这种情况下的良好层次结构。

希望这能帮助其他人。:)


这真的很晚了,但在我的情况下,我正在使用UITableViewAutomaticDimension,并在estimatedHeightForRowAtIndexPath中将一个部分的高度设置为0。因此,在将其设置为100的估计值之后,行开始显示。 - Kylo-Rey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接