作为tableview标题UIImageView有最初错误的大小?
问题描述:
我无法显示UIImageView
作为UITableView
标题。作为tableview标题UIImageView有最初错误的大小?
当它最初加载时,它不是居中,它应该是,它的大小是600px?然后,当我滚动它跳到正确的位置,并调整到正确的大小。
任何人都可以告诉我什么是造成这种情况,可能如何解决它?
问题:
那应该怎么最初显示:
注: 当我打印出来的图像高度是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
}
答
你在你的viewDidLoad()
,这是鉴于之前调用updateHeaderView()
有机会完成布局。尝试添加到viewWillAppear()
方法。
+0
这解决了它。谢谢我花了很多时间试图修复它 – Mat0
答
我在实现可伸缩标题时面临同样的问题。然而,在viewWillAppear()中调用updateHeaderView()并不适用于我。
应该从viewDidAppear()
调用。
是不是你使用tableviewWillDisplayHeader委托方法来设计你的tableview标题? – iAnurag