【问题标题】:Not able to centre elements in UIstackview?无法在 UIstackview 中居中元素?
【发布时间】:2021-02-14 09:52:52
【问题描述】:

我正在做一个现场操场项目,我以编程方式创建了所有内容,但我无法将 stackView 中的按钮对齐到中心,请帮助我 这是主操场的代码

import PlaygroundSupport
import UIKit
let vc = HomeViewController()
let navController = UINavigationController(rootViewController: vc)
navController.view.frame = CGRect(x: 0, y: 0, width: 600, height: 600)

PlaygroundPage.current.liveView = navController

这是我的 HomeVC 代码


import UIKit

public class HomeViewController:UIViewController{
    let stackView:UIStackView = {
       let st = UIStackView()
        st.axis = .horizontal
        st.alignment = .center
        st.distribution = .fillEqually
        st.backgroundColor = .cyan
        st.spacing = 10
        st.translatesAutoresizingMaskIntoConstraints = false
        
       return st
    }()
    let generateButton:UIButton = {
       let btn = UIButton()
        btn.setTitle("Generate Array", for: .normal)
        btn.backgroundColor = .yellow

        btn.translatesAutoresizingMaskIntoConstraints = false
        return btn
    }()
    let generateButton2:UIButton = {
       let btn = UIButton()
        btn.setTitle("Generate 2", for: .normal)
        btn.backgroundColor = .brown

        btn.translatesAutoresizingMaskIntoConstraints = false
        return btn
    }()
    
    public override   func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .systemPink
        view.addSubview(stackView)
        
        stackView.addArrangedSubview(generateButton)
        stackView.addArrangedSubview(generateButton2)

        
        stackView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        stackView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        stackView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        stackView.heightAnchor.constraint(equalToConstant: 120).isActive = true
    }
}


我想要的只是将该堆栈视图中的按钮对齐到中心.....请帮助我

【问题讨论】:

  • 我看到他们居中了?
  • "... 将我在 stackView 中的按钮对齐到中心..." - 你的意思完全不清楚。你想让它们水平居中吗?还是在整个视图中垂直居中?还是您希望黄色按钮居中 棕色按钮?如果您展示一张您想要结果的图片,会更容易为您提供帮助。
  • stackView 是具有 .cyan 背景颜色的,我希望按钮垂直输入

标签: ios swift xcode uistackview ios14


【解决方案1】:

您的按钮正确居中,UINavigationBar 给您一种错觉,认为它们不是。要解决此问题,您有几个选择:


隐藏导航栏:

navigationController?.setNavigationBarHidden(true, animated: false)

移除导航栏半透明:

navigationController?.navigationBar.isTranslucent = false

edgesForExtendedLayout 设置为一个空数组(Source):

edgesForExtendedLayout = []

所有这些动作都可以在viewDidLoad()函数中执行。

【讨论】:

  • 我实际上使用了navigationController?.setNavigationBarHidden(true, animated: false),但它使我的导航栏消失了我希望我的导航栏可见我也尝试设置导航栏的背景颜色但没有效果navController.navigationBar.backgroundColor = .red
  • @YuvrajAgarkar 是的,确实如此,这就是我提供更多替代选项的原因。
  • 嘿,是的,第二个工作了,谢谢你,我得看看半透明我从来不知道有这样的东西存在
  • 嘿@Tomas Jablonskis,你能简单地告诉我发生了什么,比如出了什么问题,第二个解决方案对我有什么作用?我家的 vc 是不是藏在 navController 后面?
  • @YuvrajAgarkar 是的,您的 UIViewController 视图隐藏在导航栏后面,因为它是透明的。你可以阅读更多here
猜你喜欢
  • 1970-01-01
  • 2012-05-26
  • 2021-04-22
  • 1970-01-01
  • 2023-01-24
  • 2013-02-16
  • 2021-12-01
  • 2021-08-13
  • 1970-01-01
相关资源
最近更新 更多