【问题标题】:How do I make a UITextView expand over a UIImageVIew如何使 UITextView 在 UIImageVIew 上展开
【发布时间】:2017-10-09 19:51:24
【问题描述】:

我有一个 UIImageView 和一个 UITextView。当点击 UITextView 时,我需要 UITextView 在 UIImageView 上展开。我不知道该怎么做。

来自

致这个

【问题讨论】:

  • 你能多说一点吗?扩展 UIImageView 是什么意思?你想让它们有相同的点和大小吗?
  • 我为上下文添加了图片
  • 您使用自动布局吗?文本视图和图像视图如何附加到主视图?你能说一些细节吗?您通过编程方式或使用故事板或 xib 文件创建和添加子视图?
  • 我通常使用自动布局,但我没有设置任何东西,因为我不知道该怎么做。我想了很多事情,但它们没有奏效,所以我问其他人是怎么做的。图像视图和文本视图将位于视图控制器的情节提要中。
  • @Adrian 非常感谢 :)

标签: ios swift uiimageview uitextview


【解决方案1】:

因此,您正在尝试使用点击手势更新 UIView 的高度。您需要以下IBOutlets

  • NSLayoutConstraint
  • 一个CGFloat 变量来更新它,你 可以从您的视图控制器访问以更改您的 NSLayoutConstraint的常量
  • 一个UITapGestureRecognizer

此外,您的 UIImageView 需要位于其他视图的后面。您可以将它拖到 Interface Builder 中的视图层次结构的顶部。顶视图位于层次结构的后面:

这里是:

为视图和要设置动画的 UIView 的高度创建 IBOutlets:

@IBOutlet weak var bioView: UIView!
@IBOutlet weak var bioViewHeightConstraint: NSLayoutConstraint!

这只是对故事板的参考。如果你想改变bioViewHeightConstraint,你需要访问它的常量。所以为此声明一个变量:

var bioViewHeight: CGFloat! {
    /*
     Here we're using a property observer to execute code whenever
     this value is updated
     */

    didSet {
        print("stackViewHeight updated to \(bioViewHeight)")
        UIView.animate(withDuration: 0.5, delay: 0.0, options: [.curveEaseIn], animations: { 
            self.bioViewHeightConstraint.constant = self.bioViewHeight
            self.view.layoutIfNeeded()
        }) { _ in
            self.bioTextView.scrollRangeToVisible(NSRange(location: 0, length: 0))
            print("animation complete")
        }
    }
}

您会看到我在didSet 中放入了一些动画代码。因此,每当您更改 bioViewHeight 时,bioViewHeightConstraint.constant 都会更新。

接下来,我们配置一个UITapGestureRecognizer,代码如下:

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(toggleHeight(sender:)))
    tapGestureRecognizer.numberOfTapsRequired = 1
    bioView.addGestureRecognizer(tapGestureRecognizer)

点击手势代码进入viewDidLoad

接下来,我们必须为您的水龙头编写处理程序。这是代码:

func toggleHeight(sender: UITapGestureRecognizer) {
    if bioViewHeightConstraint.constant == UIScreen.main.bounds.height / 2 {
        // true
        bioViewHeight = UIScreen.main.bounds.height - 30 // gives space for status bar
    } else {
        // false
        bioViewHeight = UIScreen.main.bounds.height / 2
    }
}

这是可以做你想做的事情的基本代码。这是一个指向repo 的链接以及完整的代码。

【讨论】:

  • 谢谢,我去看看。我实现了类似的东西,但没有你做的那么好。
  • 谢谢你,效果很好!你知道我如何添加那条蓝线并让它随着视图的上升和下降而跟随吗?
  • 我从来没有做过任何制作非矩形视图的事情,但我认为你想在 swift 中搜索非矩形视图。我认为顶部的线只是它们的边界蓝色。
  • 好的,谢谢!我画了一条线,但也许让视图变成不同的形状会更好。
【解决方案2】:

您可以按照以下步骤操作:

  • 在您的视图控制器布局(故事板或代码)中,确保将 UIImageView 放在 UITextView 下。
  • 在您处理 UITextView 点击事件的 IBAction 中,只需将其框架高度更新为与其控制器高度相等。 (如屏幕截图所示)。

    // 更新视图框架的几种方法之一
    textView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)

您可以在此处找到其他更新 UITextView 大小的方法:How do I change UIView Size?

【讨论】:

    【解决方案3】:

    您也可以使用Constrains 进行操作。只需更改UITapGesture 上的UITapGestureconstraint 中特定constraintconstant 值即可。您可以更改TopTopConstraintsTextViewheight TextView.试试这个!!

    【讨论】:

    • 我可以知道downVote的原因吗?
    猜你喜欢
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    相关资源
    最近更新 更多