在带有约束的 UIScrollView 底部放置一个 UIButton

Posted

技术标签:

【中文标题】在带有约束的 UIScrollView 底部放置一个 UIButton【英文标题】:Place a UIButton at bottom of UIScrollView with constraints 【发布时间】:2018-06-17 14:19:53 【问题描述】:

我有一个视图,其中包含三个 textfield/textview 字段,为了在键盘出现时使视图可滚动,我将所有元素放在一个滚动视图中。之前不在框架之外的元素,所以 contentSize 应该与全屏大小相同,然后当键盘出现时,所以当键盘出现时,我将滚动视图的底部约束更新为视图底部的 -keyboardHeight然后它可以在键盘上方滚动..

这一切都很好,问题是在滚动视图的底部添加一个按钮,该按钮引导/拖尾到视图的侧面和底部。

看图片:

Current view, with button hidden behind navigation bar

Where i would like the button to be. Approx 20 margin to right.left.bottom

我正在使用 SnapKit 来设置我的约束,对于按钮我想做这样的事情:

    sharebutton.snp.makeConstraints  (make) in
        make.width.left.right.equalToSuperview()
        make.bottom.equalToSuperview().offset(-20)
    

(Superview/scrollview 已经设置为边距 20)

//编辑:添加代码 ->

override func viewDidLayoutSubviews() 
    scrollview.contentSize = CGSize(width: centerView.frame.width,      height: view.frame.height)


override func viewDidLoad() 
    super.viewDidLoad()

    self.title = "title"
    view.backgroundColor = .white

    view.addSubview(scrollview)

    scrollview.addSubview(sharebutton)
    scrollview.addSubview(subjectField)
    scrollview.addSubview(messageField)
    scrollview.addSubview(datepicker)
    scrollview.addSubview(addressTable)
    addressTable.dataSource = self
    addressTable.delegate = self
    addressTable.separatorStyle = .none
    addressTable.keyboardDismissMode = .onDrag
    addressTable.separatorStyle = .singleLineEtched

    subjectField.placeholder = "content"
    datepicker.setTitle("topbutton", for: .normal)
    datepicker.setTitleColor(.black, for: .normal)
    datepicker.setTitleColor(UIColor.ME.border, for: .highlighted)
    datepicker.titleLabel?.font = UIFont.ME.button
    datepicker.layer.borderWidth = 1
    datepicker.layer.cornerRadius = 3
    datepicker.layer.borderColor = UIColor.ME.border.cgColor
    datepicker.addTarget(self, action: #selector(showDates), for: .touchUpInside)

    sharebutton.setTitle("Share", for: .normal)
    sharebutton.backgroundColor = UIColor.ME.buttonMainBlue
    sharebutton.addTarget(self, action: #selector(shareClicked), for: .touchUpInside)

    scrollview.backgroundColor = .red
    scrollview.snp.makeConstraints  (make) in
        make.top.bottom.equalToSuperview()
        make.left.width.right.equalTo(centerView)
    

    datepicker.snp.makeConstraints  (make) in
        make.top.equalToSuperview().offset(paddingGlobal)
        make.left.width.right.equalToSuperview()
        make.height.equalTo(50)
    

    addressTable.snp.makeConstraints  (make) in
        make.top.equalTo(datepicker.snp.bottom)
        make.left.right.equalTo(datepicker)
        make.height.equalTo(200)
    

    subjectField.snp.makeConstraints  (make) in
        make.top.equalTo(datepicker.snp.bottom).offset(20)
        make.left.right.equalToSuperview()
    

    messageField.snp.makeConstraints  (make) in
        make.top.equalTo(subjectField.snp.bottom).offset(20)
        make.height.equalTo(200)
        make.left.right.equalToSuperview()
    

    sharebutton.snp.makeConstraints  (make) in
        make.width.left.right.equalToSuperview()
        make.bottom.equalToSuperview().offset(-20)
    

有什么想法吗?

【问题讨论】:

显示将按钮和其他 UIElement 添加到子视图的代码。 我已添加代码 您需要先在滚动视图子视图中添加uiview(例如将其命名为containerView),然后将所有uielement(例如textfield/textview、UIButton)添加到该子视图容器视图。 我用 containerview 解决了 :) 谢谢 【参考方案1】:

您需要先在scrollView 子视图中添加一个UIView(例如将其命名为containerView),然后将所有uielement(例如textfield/textview、UIButton)添加到该containerView 的子视图中。

【讨论】:

【参考方案2】:

正如 Govind 评论的那样,我可以通过将我的子视图放在容器视图中来解决它。

【讨论】:

【参考方案3】:

使用 StoryBoard 和 Constaint Xcode 11.5 iOS 13

StoryBoard View Controller Scene

【讨论】:

以上是关于在带有约束的 UIScrollView 底部放置一个 UIButton的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 的底部约束

子视图内的 UIScrollview 高度动态变化

UIScrollView 切断底部内容

UIScrollView 不会随着里面的内容视图滚动

UIScrollView 不使用自动布局约束

带有分页的 UIScrollView 的约束