自動レイアウトのスクロールビューでコンテンツを設定しています。スクロールビュー内のオブジェクトは、前のものに上から下に固定されているため、それらは互いに下にあります。これらのオブジェクトの下に、最後に追加されたフッタービューがあります。
ここでの問題は次のとおりです。コンテンツが少ない場合、contentViewは画面の高さよりも小さくなるため、フッタービューは画面の中央のどこかに表示されます(これは通常の動作です)。しかし、それを防ぎ、ビューがどこか下に留まるようにしたいと思います。
つまり、次のような二重の制約を設定したいと思います。
Put this view below all the objects in the scrollview
AND
keep this view at a distance of max [some number] of the bottom of the screen
両方の制約が常に満たされるように:
AutoLayoutでそれを実現するにはどうすればよいですか?
自動レイアウトのみでかなり簡単...コードは必要ありません。
重要なのは、「コンテンツビュー」を使用して要素を保持し、「下」要素と「フッター」ビューの間のgreater-than-or-equal
制約を使用することです。
この画像では、黄色がメインビュー、緑がスクロールビュー、青がコンテンツビュー、ラベルがグレー、フッタービューがピンクです。
20
を使用していたので、フレームを見ることができます)UIView
をscrollViewに追加します-これが「コンテンツビュー」になります0
をscrollViewに制限する20
で上/先頭/末尾に、LabelBまでの垂直間隔が60
20
の先頭/末尾、LabelCまでの垂直間隔は60
20
の先頭/末尾Number of Lines: 0
に設定されているため、複数行のテキストで展開されますUIView
を「フッタービュー」として追加します(ラベルを貼り付けました)20
に制約します(フレームが見えるようにします)。>= 40
に設定しますPriority: 250
に変更しますこれで、LabelCの高さを拡大または縮小しても、footerViewは少なくとも垂直スペースを40ポイント保持します。 LabelCがフッタービューを下部に「プッシュ」するのに十分な大きさになると、scrollViewはスクロール可能になります。
結果:
scrollViewのContentSizeを確認し、FooterView上位制約を必要な値で変更する必要があります
私のクラスコード
import UIKit
class scrollViewDrag: UIViewController
{
/// ScrollView Outlet
@IBOutlet weak var mainScrollView: UIScrollView!
/// Footer View top spacing constraint
@IBOutlet weak var footerViewTopConstraint: NSLayoutConstraint!
/// Used for ScrollView Height
var screenHeight = CGFloat()
/// Did Load
override func viewDidLoad() {
super.viewDidLoad()
}
/// Function used to check for height
func checkForHeight(){
/// Get scrollView Height
screenHeight = mainScrollView.frame.size.height
/// Check contentSize Height ?
if mainScrollView.contentSize.height >= screenHeight {
/// When ScrollView is having height greater than your scrollView Height
/// Footer will scroll along other Views
}
else{
/// Issue Case
let spacingValue = screenHeight-mainScrollView.contentSize.height
footerViewTopConstraint.constant = spacingValue
}
}
/// Call the height function in DidAppear
override func viewDidAppear(_ animated: Bool) {
checkForHeight()
}
}
ストーリーボード
私は同じ高さの4つのビューを使用していましたが、最後にフッタービューが4番目のビューとして接続されています
FooterView上部制約
footerViewTopConstraint
として使用される上位の制約
出力
ケース1-サイズがscrollViewの高さより大きい
ケース2-予想される出力