0

我对 iphone4s 上的表格视图和单元格的外观有一些问题。在模拟器和新设备上一切都很好。

  1. UITableViewController 自定义表格单元格(图 1)未正确显示。所有标签等都位于彼此之上。它们应该像在模拟器上一样显示在另一个下方。

  2. ViewController 和 TableView 其他自定义单元格在 iPhone4s 上甚至不显示,只出现一个灰色方块。

我正在使用自动布局。你有什么建议吗?

1 2

这是代码:第一张图片:

import UIKit

class FeedController: TableViewController {
override func viewDidLoad() {
    super.viewDidLoad()

    // adjusting text size without quitting app
    NSNotificationCenter.defaultCenter().addObserver(self,
        selector: "onContentSizeChange:",
        name: UIContentSizeCategoryDidChangeNotification,
        object: nil)

    // set table row height
    tableView.estimatedRowHeight = 89
    tableView.rowHeight = UITableViewAutomaticDimension

    // removes the back button after clicked on send button to write a post
    self.navigationItem.hidesBackButton = true

    // refresh control
    self.refreshControl = UIRefreshControl()
    self.refreshControl!.addTarget(self, action: Selector("refresh:"), forControlEvents: UIControlEvents.ValueChanged)
    self.refreshControl!.backgroundColor = UIColor.grayColor()
    self.refreshControl!.tintColor = UIColor.whiteColor()
    self.tableView.addSubview(refreshControl!)
}

func reloadFeed(note: NSNotification){
    tableView.reloadData()
}

func refresh(sender: AnyObject){
    self.refreshControl!.endRefreshing()
}

// called when the text size was changed by the user 
func onContentSizeChange(notification: NSNotification) {
    tableView.reloadData()
}

}

import Foundation
import UIKit

class TableViewController: UITableViewController, UITableViewDelegate, UITableViewDataSource, PDeliversStatusAlerts {
let notifCenter = NSNotificationCenter.defaultCenter()

override init() {
    super.init()
    notifCenter.addObserver(self, selector: "displayConnectionLostAlert", name: kConnectionLostNotification, object: self)
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    notifCenter.addObserver(self, selector: "displayConnectionLostAlert", name: kConnectionLostNotification, object: self)
}


func displaySimpleAlert(#title:String, message:String){
    var alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
    alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil))
    self.presentViewController(alert, animated: true, completion: nil)
}

func displayModalDialog(#title: String, message: String, yesHandler: ((UIAlertAction!) -> Void)?, noHandler: ((UIAlertAction!) -> Void)?) {
    var alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
    alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Default, handler: yesHandler))
    alert.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.Default, handler: noHandler))

    self.presentViewController(alert, animated: true, completion: nil)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

func push(sender: AnyObject) {
}

//Tableview
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    return false
}

第二张图:

import UIKit

class NextViewController: ViewController, UITableViewDelegate, UITableViewDataSource{

var followedFeed    : FollowedHashtagFeed?
var hottestFeed     : HottestHashtagFeed?
var nearbyFeed      : NearbyHashtagFeed?

var hashtagFeed     : HashtagFeed?

@IBAction func hottestButtonTapped(sender:AnyObject) {
    hashtagFeed = FeedFactory.instance().hottestHashtagFeed()
    notifCenter.removeObserver(self)
    notifCenter.addObserver(self, selector: "reloadFeed", name: hashtagFeed?.notificationName, object: nil)
    hashtagFeed!.subscribe()
    reloadFeed()
}

@IBAction func nearbyButtonTapped(sender: AnyObject) {
    hashtagFeed = FeedFactory.instance().nearbyHashtagFeed()
    notifCenter.removeObserver(self)
    notifCenter.addObserver(self, selector: "reloadFeed", name: hashtagFeed?.notificationName, object: nil)
    notifCenter.addObserver(self, selector: "didReceiveLocationPermissionNeededNotification:", name: "location_permission_needed", object: nil)
    hashtagFeed!.subscribe()
    reloadFeed()
}

@IBAction func followedButtonTapped(sender: AnyObject) {
    hashtagFeed = FeedFactory.instance().followedHashtagFeed()
    notifCenter.removeObserver(self)
    notifCenter.addObserver(self, selector: "reloadFeed", name: hashtagFeed?.notificationName, object: nil)
    hashtagFeed!.subscribe()
    reloadFeed()
}


override func viewDidLoad() {
    super.viewDidLoad()


    //set table row height
    tableView.rowHeight = UITableViewAutomaticDimension

    //load feed cell
    var nipName=UINib(nibName: "NextTableCell", bundle:nil)
    self.tableView.registerNib(nipName, forCellReuseIdentifier: "nextCell")

    followedButtonTapped(followedButton)


    view.setNeedsLayout()
    view.layoutIfNeeded()

    println("Frame Height:")
    println(tableView.frame.height)
    println(tableView.bounds.height)
    println("Frame Width:")
    println(self.tableView.frame.width)
    println(self.tableView.bounds.width)

    /*
    hashtagFeed = FeedFactory.instance().followedHashtagFeed()

    //subscribe to feed changes
    notifCenter.addObserver(self, selector: "reloadFeed", name: hashtagFeed?.notificationName, object: nil)
    hashtagFeed!.subscribe()*/
}

func didReceiveLocationPermissionNeededNotification(note: NSNotification){
    displayModalDialog(
        title:      "Location Permission Needed",
        message:    "In order to use this functionality the app needs your permission to use location data - do you want to give this permission now?",
        yesHandler: {
            (action: UIAlertAction!) in LocationHelper.instance().askForPermission()
        },
        noHandler: nil
    )
}



//Tableview

func reloadFeed(){
    tableView.reloadData()
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return hashtagFeed!.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("nextCell", forIndexPath: indexPath) as NextTableCell
    let hashtag = hashtagFeed!.toArray()[indexPath.row]
    cell.loadItem(hashtag)
    return cell
}

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
}

}

4

1 回答 1

0

当为单元格的子视图设置的约束不强制单元格的特定高度时,此类问题可能会出现。

例如,如果您有一个包含单个子视图的单元格,并且子视图对其父视图(最近的邻居,即单元格的 contentView)有 10px 的上/下/左/右约束,但子视图本身没有高度约束,单元格将无法正确布局。

这可以看起来像所有单元格相互重叠,或者所有单元格都以默认的 44px 高度呈现。

要解决此问题(如果我们正在使用具有单个子视图的单元格的示例视图层次结构),请为子视图定义高度约束。您可能还需要将高度约束的优先级设置为小于 1000。

不确定这是否会解决您的特定问题,但它为我解决了类似的问题,因此在此处将其作为一个选项呈现。

对于它的价值,我相当确定您的问题与约束相关,这意味着上面的代码不会真正帮助回答这个问题。

于 2014-09-29T14:42:53.783 回答