作为tableview标题UIImageView有最初错误的大小?

问题描述:

我无法显示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

你在你的viewDidLoad(),这是鉴于之前调用updateHeaderView()有机会完成布局。尝试添加到viewWillAppear()方法。

+0

这解决了它。谢谢我花了很多时间试图修复它 – Mat0

我在实现可伸缩标题时面临同样的问题。然而,在viewWillAppear()中调用updateHeaderView()并不适用于我。

应该从viewDidAppear()调用。