如何解决具有自动布局的UIScrollView不滚动
我一次又一次看到相同的问题,每个问题都有相同的答案; “您需要将最后一个视图的bottomAnchor
设置为与scrollView的bottomAnchor
相等,以便它展开”。
好了,滚动视图滚动了(我看到滚动条移动了),但是视图却不滚动!这是代码;
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view,typically from a nib.
setupConstraints()
}
fileprivate func setupConstraints() {
setupScrollViewConstraints()
setuplogoImageViewConstraints()
setupUsernameTextFieldConstraints()
setupPasswordTextFieldConstraints()
setupShowAndHideButtonConstraints()
setupForgotPasswordButtonConstraints()
setupLoginButtonConstraints()
setupAccountLabelConstraints()
let signInWithAppleButton = setupSignInWithAppleButton()
setupLoginWithFacebookButtonConstraints(signInWithAppleButton)
setupSignUpButtonConstraints()
setupTermsOfUseButtonConstraints()
}
fileprivate func setupScrollViewConstraints() {
scrollView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
scrollView.topAnchor.constraint(equalTo: self.view.topAnchor),scrollView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),scrollView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),scrollView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor)
])
}
fileprivate func setuplogoImageViewConstraints() {
logoImageView.translatesAutoresizingMaskIntoConstraints = false
if #available(iOS 11.0,*) {
NSLayoutConstraint.activate([
logoImageView.topAnchor.constraint(equalTo: scrollView.safeAreaLayoutGuide.topAnchor,constant: 16),logoImageView.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor),logoImageView.widthAnchor.constraint(equalToConstant: 112),logoImageView.heightAnchor.constraint(equalToConstant: 112)
])
}
else {
NSLayoutConstraint.activate([
logoImageView.topAnchor.constraint(equalTo: scrollView.topAnchor,logoImageView.heightAnchor.constraint(equalToConstant: 112)
])
}
}
fileprivate func setupUsernameTextFieldConstraints() {
usernameTextField.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
usernameTextField.topAnchor.constraint(equalTo: logoImageView.bottomAnchor,usernameTextField.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor),usernameTextField.widthAnchor.constraint(equalToConstant: self.view.frame.width / 1.4),usernameTextField.heightAnchor.constraint(equalToConstant: 45)
])
}
fileprivate func setupPasswordTextFieldConstraints() {
passwordTextField.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
passwordTextField.topAnchor.constraint(equalTo: usernameTextField.bottomAnchor,constant: 8),passwordTextField.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor),passwordTextField.widthAnchor.constraint(equalToConstant: self.view.frame.width / 1.4),passwordTextField.heightAnchor.constraint(equalToConstant: 45)
])
}
fileprivate func setupShowAndHideButtonConstraints() {
showAndHideButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
showAndHideButton.leadingAnchor.constraint(equalTo: passwordTextField.trailingAnchor,constant: -30),showAndHideButton.trailingAnchor.constraint(equalTo: passwordTextField.trailingAnchor),showAndHideButton.centerYAnchor.constraint(equalTo: passwordTextField.centerYAnchor),showAndHideButton.heightAnchor.constraint(equalToConstant: 20)
])
}
fileprivate func setupForgotPasswordButtonConstraints() {
forgotPasswordButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
forgotPasswordButton.topAnchor.constraint(equalTo: passwordTextField.bottomAnchor),forgotPasswordButton.leadingAnchor.constraint(equalTo: passwordTextField.leadingAnchor),forgotPasswordButton.trailingAnchor.constraint(equalTo: passwordTextField.trailingAnchor),forgotPasswordButton.heightAnchor.constraint(equalToConstant: 45)
])
}
fileprivate func setupLoginButtonConstraints() {
loginButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
loginButton.topAnchor.constraint(equalTo: forgotPasswordButton.bottomAnchor,constant: 20),loginButton.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor),loginButton.widthAnchor.constraint(equalToConstant: 210),loginButton.heightAnchor.constraint(equalToConstant: 45)
])
}
fileprivate func setupAccountLabelConstraints() {
accountLabel.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
accountLabel.topAnchor.constraint(equalTo: loginButton.bottomAnchor,constant: 40),accountLabel.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor),accountLabel.heightAnchor.constraint(equalToConstant: 45)
])
}
fileprivate func setupSignInWithAppleButton() -> UIControl? {
if #available(iOS 13.0,*) {
let signInWithAppleButton = ASAuthorizationAppleIDButton(type: .default,style: .white)
signInWithAppleButton.addTarget(self,action: #selector(loginWithApple(_:)),for: .touchUpInside)
signInWithAppleButton.cornerRadius = 12
scrollView.addSubview(signInWithAppleButton)
signInWithAppleButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
signInWithAppleButton.topAnchor.constraint(equalTo: accountLabel.bottomAnchor,signInWithAppleButton.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor),signInWithAppleButton.widthAnchor.constraint(equalToConstant: 210),signInWithAppleButton.heightAnchor.constraint(equalToConstant: 45)
])
return signInWithAppleButton
}
return nil
}
fileprivate func setupLoginWithFacebookButtonConstraints(_ signInAppleButton: UIControl?) {
facebookButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
facebookButton.topAnchor.constraint(equalTo: signInAppleButton?.bottomAnchor ?? accountLabel.bottomAnchor,facebookButton.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor),facebookButton.widthAnchor.constraint(equalToConstant: 210),facebookButton.heightAnchor.constraint(equalToConstant: 45)
])
}
fileprivate func setupSignUpButtonConstraints() {
signUpButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
signUpButton.topAnchor.constraint(equalTo: facebookButton.bottomAnchor,signUpButton.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor),signUpButton.widthAnchor.constraint(equalToConstant: 210),signUpButton.heightAnchor.constraint(equalToConstant: 45)
])
}
fileprivate func setupTermsOfUseButtonConstraints() {
termsButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
termsButton.topAnchor.constraint(equalTo: signUpButton.bottomAnchor,termsButton.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor),termsButton.widthAnchor.constraint(equalToConstant: 210),termsButton.heightAnchor.constraint(equalToConstant: 50),termsButton.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor)
])
}
这个问题让我发疯了好几天了!我想念什么?
解决方法
您的logoImageView
被限制在错误的位置...
// constrain Top to scrollView contentLayoutGuide Top
//logoImageView.topAnchor.constraint(equalTo: scrollView.safeAreaLayoutGuide.topAnchor,constant: 16),logoImageView.topAnchor.constraint(equalTo: scrollView.contentLayoutGuide.topAnchor,
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。