ios - UIScrollView 不符合约束条件

标签 ios swift xcode uiscrollview swift3

我想使用 scrollView 在键盘出现时向上移动嵌套 View 内容。 (也许您知道更好的解决方案?)

因此,我将一个 UIScrollView 放入我的 UIViewController 并将一个 UIImageView 放入我的 UIScrollView。问题是尽管有限制,但我的 UIScrollView 和我的图像大小一样大。

我设置了以下约束:

scrollView.addConstraintsWithFormat(format: "H:|[v0]|", views: backgroundImage)
scrollView.addConstraintsWithFormat(format: "V:|[v0]|", views: backgroundImage)

self.view.addConstraintsWithFormat(format: "H:|[v0]|", views: scrollView)
self.view.addConstraintsWithFormat(format: "V:|[v0]|", views: scrollView) 

有人有解决方案吗?

这是我完整的 UIViewController 代码:

import UIKit

class HomeViewController: UIViewController {

    let scrollView: UIScrollView = {
        let screenSize = UIScreen.main.bounds
        let scrollView = UIScrollView()
        scrollView.backgroundColor = .red
        scrollView.contentSize = CGSize(width: screenSize.width, height: screenSize.height)
        return scrollView
    }()

    let backgroundImage:  UIImageView = {
        let imageView = UIImageView()
        imageView.image = UIImage(named: "BACKGROUND_ASIA")
        imageView.alpha = 0.5
        return imageView
    }()

    override func viewDidLoad() {
        setupHomeView()
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    func setupHomeView() {
        self.view.backgroundColor = UIColor.black

        self.view.addSubview(scrollView)
        self.view.addConstraintsWithFormat(format: "H:|[v0]|", views: scrollView)
        self.view.addConstraintsWithFormat(format: "V:|[v0]|", views: scrollView)

        scrollView.addSubview(backgroundImage)
        scrollView.addConstraintsWithFormat(format: "H:|[v0]|", views: backgroundImage)
        scrollView.addConstraintsWithFormat(format: "V:|[v0]|", views: backgroundImage)
        }
}

extension UIView {

    func addConstraintsWithFormat(format: String, views: UIView...) {
        var viewsDictionary = [String: UIView]()
        for (index, view) in views.enumerated() {
            let key = "v\(index)"
            viewsDictionary[key] = view
            view.translatesAutoresizingMaskIntoConstraints = false
        }

        addConstraints(NSLayoutConstraint.constraints(withVisualFormat: format, options: NSLayoutFormatOptions(), metrics: nil, views: viewsDictionary))
    }

}

最佳答案

  1. 您应该首先在 viewDidLoad 中调用 super。
  2. 您应该仔细阅读 scrollViews 的工作原理。

这是你需要的: ScrollView 需要对左/右/上/下进行约束。 这将确定 ScrollView 的可呈现部分的大小。这是您在键盘显示时调整大小的部分。

然后,您需要设置ScrollView 内容的大小。这是可以滚动的内容。您将需要手动设置 imageView 的大小,或者设置 imageView 与存在于 ScrollView 之外的 View 之间的相等性。 (例如 imageView.width == view.width)。

希望这指向正确的方向。您可能想考虑使用 Interface Builder 来设置它,这样您就可以看到所有约束并在设置不正确时收到警告。

关于ios - UIScrollView 不符合约束条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42929108/

相关文章:

ios - 设备 'iPad Pro (12.9-inch) (2nd generation)' 不在可用模拟器列表中

swift - 解包可选值时崩溃发现 nil

ios - 重命名 Xcode 项目后出现 NSKeyedUnarchiver 错误

ios - 将数据从 Container View 不带 Segue 传递到 MainVC

ios - Xcode 9 中的 Swift 2 到 Swift 3 核心数据 - 如何移植已保存的现有核心数据 "data"?

ios - ReactiveSwift - 将 `Action` 绑定(bind)到 `UIControl`

ios - Swift 中奇怪的导航栏/状态栏行为

ios - 单元格中的图像不出现

ios - 约束 objective-c

ios - 在 UITableViewController 中通过滚动显示 Toast 消息