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 【问题描述】:我的UITableView
在UIViewController
中遇到了一个错误。
我会试着解释一下情况和我的问题。
我有一个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
并将其嵌入到导航控制器中,然后将导航控制器设置为窗口的根视图。
【讨论】:
很抱歉这么晚才发送反馈。我宁愿不创建外部文件。如果我所有的观点都可以在我的故事板中,那将是完美的。我还是不明白有什么问题。为什么嵌入在 UITabBarController 中的 UIViewController 中的 UITableView 只显示几行?我是不是做错了什么?【参考方案2】:很抱歉很久没有反馈。
我终于找到了解决问题的方法。我在UINavigationController
中嵌入了包含UITableView
的UIViewController
。经过一些研究,这似乎是本案例的良好层次结构。
希望这会帮助其他人。 :)
【讨论】:
这真的很晚了,但在我的情况下,我使用的是 UITableViewAutomaticDimension 并将我的一个部分的高度设置为 0 估计HeightForRowAtIndexPath。因此,在将其设置为 100 的估计值后,行开始显示。以上是关于iOS - UIVIewController 中的 UITableView 不显示所有行 [Swift]的主要内容,如果未能解决你的问题,请参考以下文章
IOS 从 AppDelegate 中的 addMessageFromRemoteNotification 显示 UIViewController
如何列出iOS中uiviewcontroller中的所有子视图?
iOS - UIVIewController 中的 UITableView 不显示所有行 [Swift]