我想掩蓋UITableView的底部和頂部角落。我發現下面的代碼適用於一個特定的屏幕尺寸(iPhone 6),併產生這些結果:UIView掩蔽無法正常工作與自動佈局
class func maskRowForIndexPath<T>(cell : T ,indexPath: NSIndexPath, count : Int) -> T{
let const = UIScreen.mainScreen().bounds.width * (6/(cell as! UIView).frame.size.width)
let cornerRadii = CGSizeMake(const, const)
let row = indexPath.row
if row == 0 {
let maskLayer = CAShapeLayer()
maskLayer.path = UIBezierPath(roundedRect: (cell as! UITableViewCell).bounds, byRoundingCorners: UIRectCorner.TopLeft.union(.TopRight), cornerRadii: cornerRadii).CGPath
(cell as! UITableViewCell).layer.mask = maskLayer
}
if row == count-1{
let maskLayer = CAShapeLayer()
maskLayer.path = UIBezierPath(roundedRect: (cell as! UITableViewCell).bounds, byRoundingCorners: UIRectCorner.BottomLeft.union(.BottomRight), cornerRadii: cornerRadii).CGPath
(cell as! UITableViewCell).layer.mask = maskLayer
}
return cell
}
,你可以:
它通過將下面的代碼實現看,我添加了一個片段,試圖使角線半徑與屏幕尺寸(實際上是視圖尺寸)成正比:
let const = UIScreen.mainScreen().bounds.width * (6/(cell as! UIView).frame.size.width)
maskRowForIndexPath
方法是我的UITableView內部調用cellForRowAtIndexPath
方法:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let row = indexPath.row
let info = (indexPath.section == 0) ? firstSectionTitles : secondSectionTitles
let cell : AccountHomeTableViewCell = tableView.dequeueReusableCellWithIdentifier("AccountHomeTableViewCell") as! AccountHomeTableViewCell
cell.titleLabel.attributedText = attributedTitleForCellString(info[row].title)
cell.cellImageView.image = UIImage(named: info[row].imageName)
cell.layoutMargins = UIEdgeInsetsZero;
UIView.maskRowForIndexPath(cell, indexPath: indexPath, count: info.count)
return cell
}
當運行在iPhone 6+(和更小的iPhone 5)屏幕中的應用程序,該視圖被不適當掩蔽:
任何想法如何解決?
謝謝:)
如何將遮罩應用於UITableView?還是這些部分?另外,你的故事板的大小是多少(Any-Any或其他)? – vrwim
將掩碼應用於tableview將不會得到適當的結果 - 例如在有多個部分的情況下(如提供的圖像中)。這是一個tableview,所以如果我圍繞tableview的角落,第一部分的底角將不會被倒圓角以及第二部分的頂角。我沒有使用大小類,因爲它嚴格地是iPhone應用程序。視圖控制器的故事板推斷尺寸是4.7英寸(iPhone 6)。 @vrwim – royherma
您是否嘗試過在tableView(tableView:UITableView,willDisplayCell cell:UITableViewCell,forRowAtIndexPath indexPath:NSIndexPath)中應用mask,而不是在cellForRowAtIndexPath中? – andlin