2015-05-28 90 views
0

我已將UIScrollView添加到自定義UITableViewCell當UIScrollView位於自定義UITableViewCell中時,將UIScrollView的內容大小設置爲它的幀寬度

我設計了單元格,並在故事板中添加了scrollview,並在其中設置了約束條件。單元格和滾動視圖的框架顯示正確。

但是,我不希望我的scrollview水平滾動,所以我想將contentSize.width屬性設置爲滾動視圖框架的寬度。我在我的自定義UITableViewCell類'awakeFromNib方法中設置我的代碼。

問題是,在調整幀的寬度以適合當前大小的設備之前,顯然會調用此方法,所以我將寬度變爲故事板中的寬度,這太長了。

我在網上看到方法viewDidLoadviewDidLayoutSubviews是在調整大小後調用的,但這些都是UIViewController類中的方法。他們似乎不是UITableViewCell課程的一部分。

我不知道如何獲得UIViewController中每個自定義單元的引用,以便在建議的方法中設置值。

有人能告訴我怎麼做,或者我可以把這段代碼放在UITableViewCell類裏面嗎?謝謝!

這是我的UITableViewCell類供參考。

import UIKit 

class CustomTableViewCell: UITableViewCell, UIScrollViewDelegate { 


    @IBOutlet weak var winLoseValueLabel: UILabel! 
    @IBOutlet weak var dateLabel: UILabel! 
    @IBOutlet weak var newTotalLabel: UILabel! 
    @IBOutlet weak var locationLabel: UILabel! 
    @IBOutlet weak var playersScrollView: CustomTableCellScrollView! 
    @IBOutlet weak var scrollContentView: UIView! 

    var numLinesInScrollView : CGFloat? 
    var tblView : UITableView? 
    var people : String? 


    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 
     self.playersScrollView.tblView = tblView 
     numLinesInScrollView = 0.0 
     self.playersScrollView.contentSize.width = self.scrollContentView.frame.width 
     self.playersScrollView.contentSize.height = 100 
     self.playersScrollView.backgroundColor = UIColor(red: 1.0, green: 1.0, blue: 0, alpha: 0.25) 
     self.playersScrollView.addSubview(self.scrollContentView) 
    } 

    override func layoutSubviews() { 
     super.layoutSubviews() 
     //self.playersScrollView.contentSize.width = self.playersScrollView.frame.size.width 
     /*****Updating the contentSize did not work in this method either*****/ 
    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 
     // Configure the view for the selected state 
    } 
} 

這裏是視圖控制器。

import UIKit 

class FirstViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    @IBOutlet weak var tblView: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib.  
    } 

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

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

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

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

     let cell : CustomTableViewCell = self.tblView.dequeueReusableCellWithIdentifier("ledgerCell", forIndexPath : indexPath) as! CustomTableViewCell 

     var values = dataMgr.data[indexPath.row] 
     cell.newTotalLabel?.text = "\(values.newTotal)" 
     cell.winLoseValueLabel?.text = "\(values.newTotal - values.currentTotal)" 
     cell.dateLabel?.text = "5/17/2015" 
     //cell.playersScrollView.contentSize.width = cell.playersScrollView.frame.width 
     /*****Adjusting contentSize did not work here either*****/ 
     cell.tblView = self.tblView 

     return cell 
    } 

} 
+0

那麼'UIView'類的' - (void)layoutSubviews'方法如何:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/index.html#//apple_ref/occ/instm/UIView/layoutSubviews? – Zhang

+0

不幸的是它並沒有在那裏工作。 – Jason247

回答

0

我想出了一個可行的解決方案。我不是根據框架的寬度來設置contentSize,而是根據窗口的寬度以及從scrollview框架到窗口邊界的任何一邊的距離來設置它。該解決方案允許將代碼放置在CustomTableViewCell類的awakeFromNib()方法中。

self.playersScrollView.contentSize.width = UIScreen.mainScreen().bounds.width - (self.playersScrollView.frame.minX * 4) 

我不明白的唯一的事情就是爲什麼我不得不乘窗口邊界和4,而不是2.我對滾動型兩側的寬度相同的滾動型的框架之間的距離,但乘以2給出了不正確的值,而乘以4給出了所有屏幕尺寸的正確值。

相關問題