iOS - UIVIewController 中的 UITableView 不显示所有行 [Swift]

Posted

技术标签:

【中文标题】iOS - UIVIewController 中的 UITableView 不显示所有行 [Swift]【英文标题】:iOS - UITableView in UIVIewController doesn't display all rows [Swift] 【发布时间】:2015-10-16 19:11:07 【问题描述】:

我的UITableViewUIViewController 中遇到了一个错误。 我会试着解释一下情况和我的问题。

我有一个TabBarController,它的视图是一个UIViewController 和一个UITableView。我不使用UITableViewController,因为我的UIViewController 上有一些特定控件。

所以,当我的UIViewController 不是我的TabBarController 的孩子时,一切正常:所有行都正确显示。

但是,当我将我的UIViewController 设置为我的TabBarController 的子代时,我遇到了这个错误:只显示了一些行(在所有情况下都是精确的三分之二)。

我只是不明白发生了什么。我的代码似乎有效,但只有当我的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()
    

提前感谢您的回答! :)

【问题讨论】:

我也有同样的问题。它发生在 UICollectionViews 和 UITableViews 上。如果我在 UITabBarController 中嵌入包含这些视图之一的 ViewController,则只有一些单元格包含 Storyboard 中指定的子视图。 【参考方案1】:

自从 MainStory 板问世以来,我就不是它的忠实粉丝,前几天晚上我遇到了同样的错误,我不得不摆脱我的视图控制器并从 .xib 文件中创建一个视图控制器。

我从我的项目中删除了 ViewController 然后我去AppDelagate,添加一个变量来创建自己的ViewControllervar viewController: ViewController?

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 文件 File > New > File 选择 ios/User Interface;将其命名为 ViewController 并创建。添加 UITableView 控制器后,一切正常。

【讨论】:

很抱歉这么晚才发送反馈。我宁愿不创建外部文件。如果我所有的观点都可以在我的故事板中,那将是完美的。我还是不明白有什么问题。为什么嵌入在 UITabBarController 中的 UIViewController 中的 UITableView 只显示几行?我是不是做错了什么?【参考方案2】:

很抱歉很久没有反馈。

我终于找到了解决问题的方法。我在UINavigationController 中嵌入了包含UITableViewUIViewController。经过一些研究,这似乎是本案例的良好层次结构。

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

【讨论】:

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

以上是关于iOS - UIVIewController 中的 UITableView 不显示所有行 [Swift]的主要内容,如果未能解决你的问题,请参考以下文章

iOS8 中的 UIViewController 自动布局

IOS 从 AppDelegate 中的 addMessageFromRemoteNotification 显示 UIViewController

如何列出iOS中uiviewcontroller中的所有子视图?

iOS - UIVIewController 中的 UITableView 不显示所有行 [Swift]

如何使用 Storyboard 在 iOS 中的 UIViewController 之间切换

从 iOS 中的 UIViewController 类调用 JavaScript 函数