2016-03-12 20 views
5

Tôi có mã sau đây mà tôi đang cố gắng triển khai một hình ảnh động được thêm vào chế độ xem cuộn dọc. Tôi muốn có các ràng buộc của nó để hình ảnh tự đặt bên trong đường viền của scrollView.tại sao vfl của tôi không hoạt động?

Tuy nhiên kết quả là rằng hình ảnh dường như vẫn còn ở kích thước ban đầu của nó (đó là lớn hơn sau đó scrollview nên hình ảnh bị cắt)

Đây là mã:

@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) 

    } 

} 

enter image description here

+0

Tôi không nghĩ rằng bạn nên gọi 'view.addSubview (myScrollView)', nó nên được đính kèm bởi SB. – sschale

+0

Bạn cũng cần phải đặt contentSize của 'myScrollView' để nó biết nó có nhiều thứ hơn để hiển thị. – sschale

+0

@sschala bạn đúng Tôi đã xóa view.addSubview (myScrollView), nhưng hình ảnh tĩnh không được bố trí tốt. Các ràng buộc myScrollView được thiết lập từ bảng phân cảnh, thêm kích thước nội dung (chỉ cần thử 300 * 1000) không giúp được gì. Cảm ơn – Eran

Trả lời

2

UIView 's bên trong một UIScrollView không thể kích thước đó là mẹ. Bạn có thể tạo UIView bên trong UIScrollView và cập nhật chiều rộng trong layoutSubviews và thêm tất cả UIView bên trong UIView đó. Đây là cách bạn có thể làm điều đó: (Đối với điều này để làm việc bạn cần phải thiết lập chiều cao của contentSize của UIScrollView nhưng bạn cũng phải thiết lập này để làm cho nó cuộn.)

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) 
1

Bạn phải kích hoạt chúng như dưới đây, chỉ cần chỉnh sửa mã để triển khai.

var allConstraints = [NSLayoutConstraint]() 
var constraintName = NSLayoutConstraint.constraintsWithVisualFormat("H:|-[myImageView]-|", options: [], metrics: nil, views:["myImageView":myImageView]) 
NSLayoutConstraint.activateConstraints(allConstraints) 
Các vấn đề liên quan