Swift 如何将 UIStackView 放置在 ImageView 的特定角落

Posted

技术标签:

【中文标题】Swift 如何将 UIStackView 放置在 ImageView 的特定角落【英文标题】:Swift How to Place UIStackView in a Specific Corner of ImageView 【发布时间】:2020-08-03 21:17:57 【问题描述】:

所以基本上我有一个 ImageView 和一个 HorizontalStackView (the one circled in red) 。用户单击按钮后,我试图在图片的右上角覆盖 stackview 布局。不用说,我无法控制 ImageView 中加载的图片,因为它是从互联网上获取的。我在 Apple 文档上读到 .contentMode 会得到我正在寻找的结果。因此,这是我的代码示例

 case .UpRight:
        repostLayout.contentMode = .topRight
        imageView.addSubview(repostLayout)

正如您所料,运行应用程序时没有任何变化。有人可以指出正确的方向,我将如何完成它?

提前谢谢...

【问题讨论】:

【参考方案1】:

如果我理解您想要实现的目标,为什么不让包装 UIView 同时包含图像和 stackView 作为子视图,并简单地将图像限制在视图的尺寸范围内,并将 stackview 限制在右上角?

举个例子:

class MyViewController: UIViewController 
    let wrapperView: UIView = 
        let view = UIView()
        view.backgroundColor = .clear
        return view
    ()
    
    //Your existing stack
    private let stackView: UIStackView = 
        let stack = UIStackView()
        stack.axis = .horizontal
        return stack
    ()
    
    //Your existing imageView
    private let imageView: UIImageView = UIImageView()
    
    override func viewDidLoad() 
        super.viewDidLoad()
        
        
        //Shouldn't necessarily be in viewDidLoad, but just for example:
        view.addSubview(wrapperView)
        //Set wrapperView's constraints to where the image currently is
        
        imageView.translatesAutoresizingMaskIntoConstraints = false
        stackView.translatesAutoresizingMaskIntoConstraints = false
        
        wrapperView.addSubview(imageView)
        wrapperView.addSubview(stackView)
        imageView
            .topAnchor
            .constraint(equalTo: wrapperView.topAnchor)
            .isActive = true
        imageView
            .bottomAnchor
            .constraint(equalTo: wrapperView.bottomAnchor)
            .isActive = true
        imageView
            .leadingAnchor
            .constraint(equalTo: wrapperView.leadingAnchor)
            .isActive = true
        imageView
            .trailingAnchor
            .constraint(equalTo: wrapperView.trailingAnchor)
            .isActive = true
        
        stackView
            .topAnchor
            .constraint(equalTo: wrapperView.topAnchor)
            .isActive = true
        stackView
            .trailingAnchor
            .constraint(equalTo: wrapperView.trailingAnchor)
            .isActive = true
        
        //Make sure your stack view is not too wide or too tall for the wrapper
        //Either by using constraints or by any other method.
    

同样可以通过故事板轻松实现。如果您遇到困难,我会为情节提要发布相同的内容。

【讨论】:

以上是关于Swift 如何将 UIStackView 放置在 ImageView 的特定角落的主要内容,如果未能解决你的问题,请参考以下文章

如何根据内容动态制作 Swift UIStackView 大小?

如何在 Swift 中屏蔽 UIStackView?

使用swift在UiStackview中设置UiLabel的高度

在 Swift 4 中以编程方式将 UIImageView、UILabel 添加到 UIStackView

Swift:在 UIWebview Scroll 上隐藏 UIStackView

Swift 将 GestureRecognizer 添加到 UIStackView 之上的 View