我不熟悉自动布局和iOS,因此我想创建Facebook新闻源页面,以便掌握自动布局。 我正在使用自定义单元格的表视图。到目前为止所做的事情是:
在故事板中删除了一个tableview。
在相应的控制器类中创建其出口。
为自定义单元格创建控制器类。
在两个单元格中删除了必要的视图,并在必要的控制器类中创建了出口。
设置每个自定义单元格中的相应标识符和标识符。
现在我面临的问题是两个单元格在界面构建器中正确显示,但在设备或模拟器中只显示第一个单元格。这里的图像因为我的声誉。 interface builder
我搜索了很多,但没有找到任何合适的答案。我哪里错了? 我错过了什么吗?显然没有自动布局问题。
例如,我也粘贴了我的控制器类的代码。
class HomeScreen: UIViewController, UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if (indexPath.row == 0){
return 100
} else {
return 200
}
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
@available(iOS 2.0, *)
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
@available(iOS 2.0, *)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
guard let cell : StatusUpdateCustomTableViewCell = tableView.dequeueReusableCell(withIdentifier: "StatusUpdateCell" , for: indexPath) as? StatusUpdateCustomTableViewCell else {
fatalError("The dequeued cell is not an instance of MealTableViewCell.")
}
cell.profilePicImageView.image = #imageLiteral(resourceName: "teenGirl")
return cell
} else if indexPath.row == 1 {
guard let cell : PostCustomTableViewCell = tableView.dequeueReusableCell(withIdentifier: "PostCell1" , for: indexPath) as? PostCustomTableViewCell else {
fatalError("The dequeued cell is not an instance of MealTableViewCell.")
}
cell.profilePicImageView.image = #imageLiteral(resourceName: "teenBoy")
return cell
} else {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "thirdCustomCell")
//set the data here
return cell
}
}
@IBOutlet weak var headerViewHeight: NSLayoutConstraint!
@IBOutlet weak var imageView1: UIImageView!
@IBOutlet weak var imageView2: UIImageView!
@IBOutlet weak var imageView3: UIImageView!
@IBOutlet weak var imageView4: UIImageView!
@IBOutlet weak var imageView1Height: NSLayoutConstraint!
@IBOutlet weak var imageView2Height: NSLayoutConstraint!
@IBOutlet weak var imageView3Height: NSLayoutConstraint!
@IBOutlet weak var imageView4Height: NSLayoutConstraint!
@IBOutlet weak var tableViewPosts: UITableView!
var windowWidth = 0.0;
var windowHeight = 0.0;
override func viewDidLoad() {
super.viewDidLoad()
tableViewPosts.delegate = self
tableViewPosts.dataSource = self
// calling rotated function when device orientation changes.
NotificationCenter.default.addObserver(self, selector: Selector("rotated"), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
}
override func viewDidLayoutSubviews() {
//print(self.view.frame.size)
windowWidth = Double(self.view.frame.width);
windowHeight = Double(self.view.frame.height);
}
func rotated(){
if(UIDeviceOrientationIsLandscape(UIDevice.current.orientation)){
// hiding imageview and underlining textfields
print("landscape")
headerViewHeight.constant = CGFloat(windowHeight * 0.07)
imageView1Height.constant = CGFloat(windowHeight * 0.07)
imageView2Height.constant = CGFloat(windowHeight * 0.07)
imageView3Height.constant = CGFloat(windowHeight * 0.07)
imageView4Height.constant = CGFloat(windowHeight * 0.07)
}
if(UIDeviceOrientationIsPortrait(UIDevice.current.orientation)){
headerViewHeight.constant = CGFloat(windowHeight * 0.001)
imageView1Height.constant = CGFloat(windowHeight * 0.001)
imageView2Height.constant = CGFloat(windowHeight * 0.001)
imageView3Height.constant = CGFloat(windowHeight * 0.001)
imageView4Height.constant = CGFloat(windowHeight * 0.001)
}
}
}
答案 0 :(得分:2)
我可以从你的代码中看到你已经实现了两次numberOfRowsInSection,并且在其中一个实例中你返回10而另一个实例只有1。
答案 1 :(得分:0)
在你的代码中你返回1行所以
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
@available(iOS 2.0, *)
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1// It's Wrong
}
答案 2 :(得分:0)
<img src="https://i.stack.imgur.com/nPnsV.png" />
您可能正在使用Swift 3。 返回1的方法适用于Swift 3,但不适用于返回10的方法。此方法将被视为实例方法(控制器的本地方法)。所以实际上你的表只会显示一行。