簡體   English   中英

ScrollView寬高比中的UIImageView不起作用

[英]UIImageView in ScrollView aspect ratio not working

我在情節提要中定義了一個UIScrollView,並帶有一個插座。 此滾動視圖通過代碼(不在情節提要上)將UIImageView添加到了它。 當我運行該應用程序時,圖像會被拉伸。 一旦我觸摸以縮放圖像,它就會捕捉到適當的縱橫比。

這里發生了什么?!

@IBOutlet var scrollView: UIScrollView!

var imageView = UIImageView()
var selectedImage: UIImage!

override func viewDidLoad() {
    super.viewDidLoad()

    scrollView.delegate = self
    imageView.frame = CGRectMake(0, 0, scrollView.frame.size.width, scrollView.frame.size.height)
    imageView.image = selectedImage
    imageView.contentMode = .ScaleAspectFit
    imageView.userInteractionEnabled = true


    scrollView.contentMode = .ScaleAspectFit
    scrollView.addSubview(imageView)

    let scrollViewFrame = scrollView.frame
    let scaleWidth = scrollViewFrame.size.width / scrollView.contentSize.width
    let scaleHeight = scrollViewFrame.size.height / scrollView.contentSize.height
    let minScale = min(scaleHeight, scaleWidth)
    scrollView.minimumZoomScale = 0.3
    scrollView.maximumZoomScale = 1
    scrollView.zoomScale = minScale

    centerScrollViewContents()


    self.closeBtn.layer.cornerRadius = CGRectGetWidth(self.closeBtn.frame)/20.0


}

加載后: 在此處輸入圖片說明

完全移動縮放后: 在此處輸入圖片說明

修正的問題:如以下答案所示,我編輯了代碼以在viewWillLayoutSubviews中定義imageView.frame而不是viewDidLoad。 我現在遇到一個新問題-圖像無法放大...它允許您放大圖像,直到松開手指,然后恢復為原始大小。

這與scrollView.maximumZoomScale不夠大有關嗎?

更正的代碼:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    imageView.frame = CGRectMake(0, 0, scrollView.frame.size.width, scrollView.frame.size.height)
}
override func viewDidLoad() {
    super.viewDidLoad()

    scrollView.delegate = self
    //imageView.frame = CGRectMake(0, 0, scrollView.frame.size.width, scrollView.frame.size.height)
    imageView.image = selectedImage
    imageView.contentMode = .ScaleAspectFit
    imageView.userInteractionEnabled = true


    scrollView.contentMode = .ScaleAspectFit
    scrollView.addSubview(imageView)

    let scrollViewFrame = scrollView.frame
    let scaleWidth = scrollViewFrame.size.width / scrollView.contentSize.width
    let scaleHeight = scrollViewFrame.size.height / scrollView.contentSize.height
    let minScale = min(scaleHeight, scaleWidth)
    scrollView.minimumZoomScale = 0.3
    scrollView.maximumZoomScale = 2.0
    scrollView.zoomScale = minScale

    centerScrollViewContents()


    self.closeBtn.layer.cornerRadius = CGRectGetWidth(self.closeBtn.frame)/20.0


}

在-viewDidLoad()方法中設置框架為時過早

如果您將在-viewDidLoad()中打印您的scrollView.frame,則實際上將返回該框架,然后視圖將對其子視圖進行布局。

因此,您需要在viewWillLayout中對imageView進行約束或重新定義imageView.frame。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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