2016-03-03 34 views
0

我無法顯示UIImageView作爲UITableView標題。作爲tableview標題UIImageView有最初錯誤的大小?

當它最初加載時,它不是居中,它應該是,它的大小是600px?然後,當我滾動它跳到正確的位置,並調整到正確的大小。

任何人都可以告訴我什麼是造成這種情況,可能如何解決它?

問題:

When the image is initially loaded

那應該怎麼最初顯示:

How it should display initially

注: 當我打印出來的圖像高度是600像素寬但應該initiall y與屏幕寬度相同。 UIImageView設置爲Aspect Fill

我的設置:

@IBOutlet var tableView: UITableView! 
@IBOutlet weak var tableImage:UIImageView! 

var headerView: UIView! 
var headerMaskLayer: CAShapeLayer! 
private let kTableHeaderHeight: CGFloat = 260.0 
private let kTableHeaderCutAway: CGFloat = 25.0 

override func viewDidLoad() { 
    super.viewDidLoad() 

    headerView = tableView.tableHeaderView 
    tableView.tableHeaderView = nil 
    tableView.addSubview(headerView) 

    tableView.contentInset = UIEdgeInsets(top: kTableHeaderHeight, left: 0, bottom: 0, right: 0) 
    tableView.contentOffset = CGPoint(x: 0, y: -kTableHeaderHeight) 

    headerMaskLayer = CAShapeLayer() 
    headerMaskLayer.fillColor = UIColor.blackColor().CGColor 
    headerView.layer.mask = headerMaskLayer 

    updateHeaderView() 

    displayPoster(listBackdrop!) 

    //.... rest of code 
} 

func displayPoster (urlString: String) 
{ 
    if (urlString != ""){ 

     let newUrl = urlString.stringByReplacingOccurrencesOfString("w500", withString: "w780") 

     self.tableImage.alpha = 0 

     let url = NSURL(string: newUrl) 
     // loading image with haneke lib 
     self.tableImage.hnk_setImageFromURL(url!) 

     UIView.animateWithDuration(1){ 
      self.tableImage.alpha = 1.0 
     } 
    } 
} 

func scrollViewDidScroll(scrollView: UIScrollView) { updateHeaderView() } 

func updateHeaderView(){ 

    var headerRect = CGRect(x: (tableView.bounds.width-tableImage.bounds.width)/2, y: -kTableHeaderHeight, width: tableView.bounds.width, height: kTableHeaderHeight) 

    if tableView.contentOffset.y < -kTableHeaderHeight{ 
     headerRect.origin.y = tableView.contentOffset.y 
     headerRect.size.height = -tableView.contentOffset.y 
    } 

    headerView.frame = headerRect 

    // the image cutaway 
    let path = UIBezierPath() 
    path.moveToPoint(CGPoint(x: 0, y: 0)) 
    path.addLineToPoint(CGPoint(x: headerRect.width, y: 0)) 
    path.addLineToPoint(CGPoint(x: headerRect.width, y: headerRect.height)) 
    path.addLineToPoint(CGPoint(x: headerRect.width/2, y: headerRect.height-kTableHeaderCutAway)) 
    path.addLineToPoint(CGPoint(x: 0, y: headerRect.height)) 
    headerMaskLayer?.path = path.CGPath 

} 

的UIImageView的約束條件設置如下:
Constraints of table header image

+0

是不是你使用tableviewWillDisplayHeader委託方法來設計你的tableview標題? – iAnurag

回答

4

你在你的viewDidLoad(),這是鑑於之前調用updateHeaderView()有機會完成佈局。嘗試添加到viewWillAppear()方法。

+0

這解決了它。謝謝我花了很多時間試圖修復它 – Mat0

1

我在實現可伸縮標題時面臨同樣的問題。然而,在viewWillAppear()中調用updateHeaderView()並不適用於我。

應該從viewDidAppear()調用。