![](/img/trans.png)
[英]Why this code doens't work??? trying to change image from UIImageView if swiped right or left
[英]why won't right, left, width, height work on UIImageView?
我正在關注消息聊天應用程序的教程,但在 UIImageViews 上不斷出現錯誤。 例如 ~ userImageView.right、userImageView.width 等都會出錯,說 UIImageView 沒有成員。 我在我的應用程序的其他部分使用了正確/寬度/高度,我無法弄清楚為什么它在這里不開心......想法?
class ConversationTableViewCell: UITableViewCell {
static let identifier = "ConversationTableViewCell"
private let userImageView: UIImageView = {
let imageView = UIImageView()
imageView.contentMode = .scaleAspectFill
imageView.layer.cornerRadius = 50
imageView.layer.masksToBounds = true
return imageView
}()
private let userNameLabel: UILabel = {
let label = UILabel()
label.font = .systemFont(ofSize: 21, weight: .semibold)
return label
}()
private let userMessageLabel: UILabel = {
let label = UILabel()
label.font = .systemFont(ofSize: 19, weight: .regular)
label.numberOfLines = 0
return label
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
contentView.addSubview(userImageView)
contentView.addSubview(userNameLabel)
contentView.addSubview(userMessageLabel)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutSubviews() {
super.layoutSubviews()
userImageView.frame = CGRect(x: 10,
y: 10,
width: 100,
height: 100)
userNameLabel.frame = CGRect(x: userImageView.right + 10,
y: 10,
width: contentView.width - 20 - userImageView.width,
height: (contentView.height-20)/2)
userMessageLabel.frame = CGRect(x: userImageView.right + 10,
y: userNameLabel.bottom + 10,
width: contentView.width - 20 - userImageView.width,
height: (contentView.height-20)/2)
}
UIImageView
是UIView
object。 因此,它有一個 frame 屬性,它是一個CGRect
。
您可以使用someImageView.frame
來獲取視圖的框架。
CGRect
具有屬性size.height
和size.width
。 它們還具有屬性maxX
和maxY
,相當於right
和bottom
。 (實際上,似乎CGRect
也有屬性height
和width
,所以你可以跳過“size.”前綴。)
所以對於 imageView someImageView
:
height = someImageView.frame.height
width = someImageView.frame.width
right = someImageView.frame.maxX
bottom = someImageView.frame.maxY
創建一個新的 swift 文件並在其中添加以下代碼,go 一切都會好起來的。
extension UIView {
public var width: CGFloat {
return frame.size.width
}
public var height: CGFloat {
return frame.size.height
}
public var top: CGFloat {
return frame.origin.y
}
public var left: CGFloat {
return frame.origin.x
}
public var bottom: CGFloat {
return top + height
}
public var right: CGFloat {
return left + width
}
}
或者:
在您的項目中導入此 package AATools的更簡單方法,它包含許多方便的擴展,可用於快速開發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.