2016-03-12 13 views
5

Mam następujący kod, który próbuję zaimplementować dynamiczny obraz dodany do widoku przewijania pionowego. Chciałbym mieć swoje ograniczenia, aby obraz znalazł się w granicach scrollView.dlaczego mój vfl nie działa?

Jednak wyniki są takie, że obraz wydaje się pozostawać w oryginalnym rozmiarze (który jest większy niż w Scrollview więc obraz zostanie wykadrowane)

Oto kod:

@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

nie wiem myślę, że powinieneś wywoływać 'view.addSubview (myScrollView)', powinien już być dołączony przez SB. – sschale

+0

Musisz również ustawić contentSize 'myScrollView', aby wiedział, że ma więcej rzeczy do wyświetlenia. – sschale

+0

@sschala masz rację usunąłem view.addSubview (myScrollView), ale obrazy nie są układane dobrze. Ograniczenia myScrollView są ustawiane na podstawie scenorysów, a dodanie rozmiaru treści (po prostu wypróbowane 300 * 1000) nie pomogło. Dzięki – Eran

Odpowiedz

2

UIView „s wewnątrz UIScrollView rozmiar nie może na jego rodzica. Możesz utworzyć UIView wewnątrz UIScrollView i zaktualizować szerokość w layoutSubviews i dodać wszystkie UIView wewnątrz tego UIView. Oto w jaki sposób można to zrobić: (. Aby to zadziałało trzeba ustawić wysokość contentSize na UIScrollView ale trzeba również ustawić to w celu uczynienia go przewijać)

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

Musisz je aktywować jak poniżej, po prostu edytuj kod do swojej implementacji.

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