0

scrollViewビューが画面に読み込まれている間だけ設定したいのですが、使用中にコンテンツのサイズが期待どおりに機能しませんAutoLayoutViewDidAppearViewDidLoad

@IBOutlet weak var addressScrollView: UIScrollView!{
    didSet{

        self.addressScrollView.pagingEnabled = true
        self.addressScrollView.pagingEnabled = true
        self.addressScrollView.showsHorizontalScrollIndicator = false

    }
}

var billQuotes = ["This is bill","Bill Smokes","Bill drinks","But Still Codes"]
var viewFrame: CGRect = CGRectMake(0, 0, 0, 0)

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


override func viewDidLayoutSubviews() {
    self.addressScrollView.contentSize = CGSizeMake(self.addressScrollView.frame.size.width * CGFloat(billQuotes.count+1), self.addressScrollView.frame.size.height)
}
override func viewDidAppear(animated: Bool) {
    //if placed in view did appear it works as expected but i want it to
}
func configureScrollView(){

    for bill in billQuotes{

        var index = find(billQuotes,bill)
        viewFrame.size = self.addressScrollView.frame.size
        viewFrame.size.width = self.addressScrollView.frame.size.width - 20
        viewFrame.origin.x = ((self.addressScrollView.frame.size.width) * CGFloat(index!)) + 10
        let addressView = UIView()
        addressView.layer.borderWidth = 2.0
        addressView.layer.borderColor = UIColor.grayColor().CGColor
        addressView.layer.cornerRadius = 5
        addressView.frame = viewFrame
        addressView.backgroundColor = UIColor(red: 0.847, green: 0.847, blue: 0.843, alpha: 1.00)

        var billLabel = UILabel(frame: CGRectMake(32, 8, addressView.frame.size.width - 34, 30))
        billLabel.textAlignment = NSTextAlignment.Left
        billLabel.text = "\(bill)"
        billLabel.font = UIFont.systemFontOfSize(20)
        billLabel.textColor = UIColor(red: 0.337, green: 0.341, blue: 0.345, alpha: 1.00)
        addressView.addSubview(billLabel)
        addressScrollView.addSubview(addressView)
    }

}

UPDated:viewDidLoadでscrollViewを構成して、ビューが表示されてから数秒後にはすぐに表示されないようにしたい

4

3 に答える 3

0

viewWillLayoutSubviews をオーバーライドし、そこに configureScrollView() を配置する必要があります。

于 2016-03-02T06:32:01.400 に答える
0

configureScrollView()問題は、呼び出したときにまだ実行されていないため、viewDidLoadはまだに関連して自分のものであることを認識していないことです。したがって、 で構成すると、 のフレームに対して正しく構成され、変更されます (はおそらくとここにあります)。はすでに実行されているため、ここで動作するのは正しい.layoutSubviewsUIScrollViewframesuperviewviewDidLoadviewself.view.frame600widthheightviewDidAppearviewDidLayoutSubviewssuperviewframe

できることは、layoutSubviewsを構成する前に強制することですUIScrollView。ビューを強制する必要がある背後にあるロジックをよく理解していないので、少しいじる必要があります。しかし、線に沿った何か:

override func viewDidLoad() {
    super.viewDidLoad()

    self.view.setNeedsLayout() // Not sure if this is needed
    self.view.layoutIfNeeded() // Not sure if this is needed

    self.addressScrollView.setNeedsLayout()
    self.addressScrollView.layoutIfNeeded()
    configureScrollView()

    self.addressScrollView.contentSize = CGSizeMake(self.addressScrollView.frame.size.width * CGFloat(billQuotes.count+1), self.addressScrollView.frame.size.height)
}
于 2016-03-02T07:30:20.653 に答える