【问题标题】:why is my vfl not working?为什么我的 vfl 不工作?
【发布时间】:2016-03-12 19:01:06
【问题描述】:

我有以下代码,我正在尝试实现添加到垂直滚动视图的动态图像。我希望有它的约束,以便图像将自身设置在 scrollView 的边界内。

但结果是图像似乎保持其原始大小(比滚动视图大,因此图像被裁剪)

代码如下:

@IBOutlet weak var myScrollView: UIScrollView!
private let lettersModel:LettersModel = LettersModel();
private var imgs = [UIImageView]();

override func viewDidLoad() {
    super.viewDidLoad()

    myScrollView.backgroundColor = UIColor.brownColor()

    for var index=0; index<1; index++
    {

        let myImage:UIImage = UIImage(named: lettersModel.getLetterAt(index))!
        let myImageView:UIImageView = UIImageView()
        myImageView.image = myImage
        myImageView.contentMode = UIViewContentMode.ScaleAspectFit

        myScrollView.addSubview(myImageView)

        myImageView.translatesAutoresizingMaskIntoConstraints = false;

        myScrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[myImageView]-|", options: [], metrics: nil, views:["myImageView":myImageView] ))

        imgs.append(myImageView)

    }

}

【问题讨论】:

  • 我认为你不应该打电话给view.addSubview(myScrollView),它应该已经被SB附上了。
  • 你还需要设置myScrollView的contentSize,让它知道有更多的东西要显示。
  • @sschala 你说得对,我删除了 view.addSubview(myScrollView) ,但静止图像的布局并不好。 myScrollView 约束是从 storyboard 设置的,添加内容大小(刚刚尝试 300*1000)没有帮助。谢谢
  • 你能检查一下你的scrollView宽度是否等于屏幕宽度吗?
  • view.frame.width = 1024 , scrollView.frame.width = 125 , scrollview.contenSize.width=0

标签: swift autolayout


【解决方案1】:

UIView 中的 UIScrollView 无法调整到其父级。您可以在 UIScrollView 中创建一个 UIView 并更新 layoutSubviews 中的宽度并将所有 UIView 添加到该 UIView 中。以下是您可以执行的操作:(为此,您需要设置 UIScrollView 的 contentSize 的高度,但您还必须设置它才能使其滚动。)

class MyScrollView : UIScrollView {

    let contentView = UIView()

    override init (frame : CGRect) {
        super.init(frame : frame)
        addSubview(contentView)
    }

    convenience init () {
        self.init(frame:CGRect.zero)
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("This class does not support NSCoding")
    }

    override func layoutSubviews() {
        contentView.frame.size.width = frame.width
        contentView.frame.size.height = contentSize.height
        super.layoutSubviews()
    }
}

var myScrollView = MyScrollView(frame: CGRect(x: 0, y: 0, width: 400, height: 600))
var imgs = [UIImageView]();

let myImage = UIImage(named: "achtergrond")
let myImageView:UIImageView = UIImageView()
myImageView.image = myImage
myImageView.contentMode = UIViewContentMode.ScaleAspectFit

myScrollView.contentSize.height = 1000 // <-- setting the contentSize
myScrollView.contentView.addSubview(myImageView) // <-- You add the UIImageView to the contentView

myImageView.translatesAutoresizingMaskIntoConstraints = false;
myScrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[myImageView]-|", options: [], metrics: nil, views:["myImageView":myImageView] ))

imgs.append(myImageView)

【讨论】:

    【解决方案2】:

    您必须像下面那样激活它们,只需为您的实现编辑代码。

    var allConstraints = [NSLayoutConstraint]()
    var constraintName = NSLayoutConstraint.constraintsWithVisualFormat("H:|-[myImageView]-|", options: [], metrics: nil, views:["myImageView":myImageView])
    NSLayoutConstraint.activateConstraints(allConstraints)
    

    【讨论】:

      猜你喜欢
      • 2014-05-17
      • 2017-09-20
      • 2012-04-14
      • 2016-09-15
      • 2012-02-14
      • 2012-08-10
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多