私は「閉じる」のUIButton
を「UIPageController.view
」に追加するコードをいくつか持っています。UIPageControl SwiftへのUIButtonのCenterYアンカー
WORKING CODE:
class func closeButton(_ pageController: UIPageViewController) -> UIButton {
let button = UIButton()
button.setTitleColor(UIColor.white, for: UIControlState())
button.setTitle("Close", for: UIControlState())
button.titleLabel!.font = UIFont.systemFont(ofSize: 15)
button.contentHorizontalAlignment = UIControlContentHorizontalAlignment.left
button.translatesAutoresizingMaskIntoConstraints = false
pageController.view.addSubview(button)
button.widthAnchor.constraint(equalToConstant: 50).isActive = true
button.heightAnchor.constraint(equalToConstant: 36).isActive = true
button.trailingAnchor.constraint(equalTo: pageController.view.trailingAnchor).isActive = true
button.bottomAnchor.constraint(equalTo: pageController.view.bottomAnchor).isActive = true
return button
}
しかし、私はiPhone Xシミュレータ上で自分のコードをテストし、UIPageControl
は他のiPhoneよりも下からもはるかに高いです。だから私が追加したばかりのボタンは丸みのある丸みを帯びていて、UIPageControl
ははるかに高いです。
だから、私はとUIPageControl
を参照してみました:
let pageControl: UIPageControl = UIPageControl.appearance()
し、次いでbutton.bottomAnchor.constraint...
を置き換える:
button.centerYAnchor.constraint(equalTo: pageControl.centerYAnchor).isActive = true
しかし、これはエラーがスローされます。 UIPageControl.frame
を印刷しようとしましたが、それは0,0,0,0です。だから私はそれがそれと関係があると仮定しています。
UIPageControlに対して制約を設ける方法はありますか?
私は二つの部分に機能を分割します。ボタンを作成するもの、それを制約するもの。それを作成する最初の部分は 'ViewDidLoad'を呼び出していますが、2番目の部分は' viewDidLayoutSubviews'を呼び出すための制約です。あなたは私をそこに連れて来ました。ほとんどの場合、おそらく 'viewDidLayoutSubviews'にすべてを入れることができますが、 'isHidden = true'かどうかを判断する別の部分があるので、 'ViewDidLoad'でボタンを作成する必要があります。 –
良い選択;)viewDidLayoutSubviewsでは、pageControlフレームを取得しています。そのため、ボタンを作成する部分ではなく、viewDidLoadで呼び出すのが正しいです。どういたしまして ;) –