use*_*464 19 iphone resize objective-c uitableview autolayout
我有一个带约束的UITableViewCell,以便在iPhone 6和iPhone 6+上正确布局单元格.
单元格内容正确地正确调整大小.但是,我需要在其中一个视图上绘制一个子图层渐变.为了做到这一点,我正在使用awakeFromNib来绘制子层.
AwakeFromNib在自动调整之前给出了帧的大小,因此渐变子视图的大小不正确.
如果我使用layoutSubviews,第一次调用时,大小也是错误的,并且单元格需要在其大小合适之前滚动; 所以这个方法也行不通
我应该使用什么方法来获得正确的帧尺寸才能正确绘制?
小智 26
这段代码对我有用,用Swift编写.
import UIKit
import QuartzCore
class DemoTableViewCell: UITableViewCell {
@IBOutlet weak var gradientView: UIView!
private let gl = CAGradientLayer()
override func awakeFromNib() {
super.awakeFromNib()
// set gradient
let colors: [AnyObject] = [
UIColor.clearColor().CGColor,
UIColor(white: 0, alpha: 0.8).CGColor
]
gl.colors = colors
gradientView.layer.insertSublayer(gl, atIndex: 0)
}
override func layoutSubviews() {
super.layoutSubviews()
// update gradient
gl.frame = gradientView.bounds
}
}
Run Code Online (Sandbox Code Playgroud)
ang*_*nag 17
在awakeFromNib期间,框架布局不会出现.在您的自定义单元格上,您可以执行此操作
-(void)drawRect:(CGRect)rect
{
[super drawRect:rect];
// Enter Custom Code
}
Run Code Online (Sandbox Code Playgroud)
或者您可以像这样覆盖applyLayoutAttributes方法
-(void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
{
[super applyLayoutAttributes:layoutAttributes];
// Enter custom Code here
}
Run Code Online (Sandbox Code Playgroud)
applyLayoutAttributes在drawRect方法之前调用,但仍具有rect的大小参数.
如果有人要修改UITableViewCell中的UI,@ angshuk答案是完美的。就像我的情况一样,我试图在运行时向UIView添加不同的图层,并使用情节提要/自动布局将其放置在UITableViewCell中。在awakeFromNib()
&内layoutSubviews()
也尝试过同样的事情。没事。
这是使用Swift的相同代码。顺便说一句,我在Swift 2.2中使用Xcode 7.3.1。
import UIKit
class InviteMainCellClass: UITableViewCell {
@IBOutlet weak var shareCodeLblSuperView: UIView! //Custom view added using IB/Autolayout
override func awakeFromNib() {
super.awakeFromNib()
//shareCodeLblSuperView.addDashedBorderToView(self.shareCodeLblSuperView, viewBorderColor: UIColor.whiteColor(), borderWidth: 1.0) //Not worked
}
override func drawRect(rect: CGRect) {
super.drawRect(rect)
shareCodeLblSuperView.addDashedBorderToView(self.shareCodeLblSuperView, viewBorderColor: UIColor.whiteColor(), borderWidth: 1.0) //Worked
}
override func layoutSubviews() {
super.layoutSubviews()
//shareCodeLblSuperView.addDashedBorderToView(self.shareCodeLblSuperView, viewBorderColor: UIColor.whiteColor(), borderWidth: 1.0)//Not worked
}
Run Code Online (Sandbox Code Playgroud)
希望这会有所帮助。谢谢。
归档时间: |
|
查看次数: |
9415 次 |
最近记录: |