2016-06-14 6 views
0

私は、scrollViewの内部に配置されたUIViewを持っています。 (0.98乗算器/ w)のscrollViewに等しい高 autolayoutを使用しているときにUIScrollViewの内部にUIViewを水平に配置する方法はありますか?

  • が水平中心

    • 等しい幅にscrollView(W 0.98乗算器/)
    • :UIViewのは、私は、ストーリーボードで設定した4つの制約を有していますscrollView内部(W /定数= 0)
    • 垂直scrollView内側中心
    • (W /定数= 0)

    scrollViewには、すべての定数= 0の、規則的に末尾の先頭の&ボトム制約があります。

    私のscrollViewには次のプロパティも設定しました。

    self.scrollView.contentSize.width = self.scrollView.frame.size.width + 30 
    

    どのように私のscrollViewの中にUIViewの中心を置くことができますか?

    注:私は、scrollView内のUIViewの位置を制御できるself.horizo​​ntalCenterConstraint.constantにアクセスできます。私はやってみた

    self.horizontalCenterConstraint.constant = (self.scrollView.contentSize.width/2) 
    

    これは実際にはscrollView内のUIViewの中心にはありません。

  • +0

    どのメソッドで 'contentSize'と' horizo​​ntalCenterConstraint'を設定しますか? (viewDidLoad、viewWillAppera ...) – tbilopavlovic

    +0

    これはすべてUITableViewCellの内部で発生するため、私はtraitCollectionDidChange(..)のセルオーバーライドを行い、それを設定します。最初はawakeFromNib(..)にもあります。 – AppreciateIt

    +0

    viewとscrollViewの間に先頭、下端を追加する必要があると思うので、scrollviewはcontentSizeマージンからのビューの距離を計算できます – tbilopavlovic

    答えて

    1

    scrollViewのルートサブビューとして(leading、trailing、top、bottom = 0、scrollViewと同じ幅と高さ)containerViewを追加して、このビューを追加することをお勧めします。

    • scrollView
      • containerView
        • YOUR_VIEW(あなたが既に持っているのと同じ制約)

    今scrollViewが原因containerViewの制約のcontentSizeを計算することができます、aあなたはself.scrollView.contentSize.width = self.scrollView.frame.size.width + 30を追加したので、scrollViewより幅の広いcontainerViewの幅を設定し、水平にスクロールします。

    +1

    これはうまくいきました。 。 horizo​​ntalCenterConstraint.constantをEqualWidths.constantの半分に設定する必要がありました。例えば、scrollViewがUIViewの両側に30ポイントを持っていなければならない場合、EqualWidths.constant = 30とhorizo​​ntalCenterConstraint.constant = 15となります。scrollViewのcontentOffsetも変更する必要がありますが、 scrollViewはそれを許可していません(目に見える変更はありません)。たぶん、誤解がありますか? – AppreciateIt

    +0

    scrollView.contentoffsetを手動で変更することは、特にscrollViewをサブクラス化してoverrideSubviews(..)でオーバーライドしたときに動作するように見えるので、非常に面倒です。また、traitCollectionの変更があるたびに変更する必要があります。これは、デバイスが回転するたびにオフセットが変更されるためです。 – AppreciateIt

    関連する問題