簡體   English   中英

為什么右、左、寬、高不能在 UIImageView 上工作?

[英]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)

}

UIImageViewUIView object。 因此,它有一個 frame 屬性,它是一個CGRect

您可以使用someImageView.frame來獲取視圖的框架。

CGRect具有屬性size.heightsize.width 它們還具有屬性maxXmaxY ,相當於rightbottom (實際上,似乎CGRect也有屬性heightwidth ,所以你可以跳過“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM