在 stackview 中调整 UIView 的大小
Posted
技术标签:
【中文标题】在 stackview 中调整 UIView 的大小【英文标题】:Resize a UIView inside a stackview 【发布时间】:2017-09-17 20:54:23 【问题描述】:我需要帮助来完成这个:
-
这是一组 3 张照片。第一张照片是点击前的按钮屏幕,第二张照片是点击后的屏幕,第三张照片是我在 IB 中使用 stackview 设计的方式
我一直在尝试创建它,这就是我目前得到的结果。正如按钮点击后图片显示的那样,我仍然没有创建任何内容:
我现在的结果
正如您在 gif 中看到的,当我按下按钮时,UIView height constraint.constant 设置为更高的值,并且 UIView 变得更高。我想要的只是剥离的背景也变得更高。
这是视图在 IB 中的布置方式。
最后,这就是我的编码方式
class LetterScreenViewController: UIViewController, ResizeWordViewDelegate
@IBOutlet weak var youTubeView: YouTubeView!
@IBOutlet weak var phonemeView: PhonemeView!
@IBOutlet weak var wordView: WordView!
var letterPresenter: LetterPresenter?
@IBOutlet weak var heightWordViewConstraint: NSLayoutConstraint!
override func viewDidLoad()
super.viewDidLoad()
delegateWordObj()
if let presenter = letterPresenter
presenter.setupView()
@IBAction func dismissLetter(_ sender: Any)
dismiss(animated: true, completion: nil)
func delegateWordObj()
wordView.resizeWordViewDelegate = self
func didPressButton()
if heightWordViewConstraint.constant <= 0
heightWordViewConstraint.constant = 30
else
heightWordViewConstraint.constant = 0
import UIKit
protocol ResizeWordViewDelegate
func didPressButton()
class WordView: UIView
@IBOutlet weak var backgroundListras: UIImageView!
@IBOutlet var WordView: UIView!
@IBOutlet weak var showWordButton: UIButton!
var resizeWordViewDelegate: ResizeWordViewDelegate!
override init(frame: CGRect)
super.init(frame: frame)
xibInit()
required init?(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
xibInit()
func xibInit()
Bundle.main.loadNibNamed("WordView", owner: self, options: nil)
addSubview(WordView)
WordView.frame = self.bounds
WordView.round(corners: [.topLeft,.topRight], radius: 120)
WordView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
@IBAction func showWordButtonAction(_ sender: Any)
resizeWordViewDelegate.didPressButton()
self.frame.size = CGSize(width: 375, height: 200)
self.backgroundListras.frame.size = CGSize(width: 375, height: 200)
我想知道一种方法来调整这个 UIView 的所有内容。在找到增加高度的解决方案后,我将能够放置 我按下按钮时显示的所有其他组件。
【问题讨论】:
@MKR 嗨,MKR。我尝试过:通过 UIViewController 中的代码更改 UIView 大小,通过 UIView 自己的类中的代码更改 UIView 大小,将 constraint.constant 更改为更高的值,到目前为止我所做的所有这些事情都会导致相同的结果gif 链接显示的事件。 UIView 变得更大,但所有内容都保持相同的大小,即使我将更高的值强制设置为条纹背景高度,它也会改变值,但不会改变模拟器中视觉高度的任何内容。检查此链接imgur.com/a/eG43i。它显示了我说的最后一件事。 【参考方案1】:我相信你的目标是创造这样的东西:
我所要做的就是以编程方式更改约束的高度
查看下面项目中的解决方案:
https://gitlab.com/DanielLimaDF/ResizeTest.git
重要提示:注意addSubview,如果在调用addSubview之前创建了约束,它可以从视图中删除约束
【讨论】:
哇!谢谢丹尼尔·利马。这就是我需要复制的效果!以上是关于在 stackview 中调整 UIView 的大小的主要内容,如果未能解决你的问题,请参考以下文章
在不停止 stackView 自动调整大小的情况下对齐图像视图
具有顶部空间的 UIView 对 UIStackView 的约束未显示在 Stackview 下方
如何以编程方式将自定义 UIView 添加到 UIScrollView 之上的 Stackview?