Swift inputAccessoryView 覆盖错误

2024-02-04

我的外观遇到了奇怪的错误inputAccessoryView。在转换过程中,它看起来像这样:

转换后,它应该出现:

我像这样覆盖该属性:

    override var inputAccessoryView: UIView! {
    get {
        if composeView == nil {
            composeView = CommentComposeView(frame: CGRectMake(0, 0, 0, MinimumToolbarHeight - 0.5))
            self.setupSignals()
        }

        return composeView
    }
}

我想知道是否有人可以指出我正在做的事情中的任何明显缺陷,或者提供更多关于如何确保我的视图在转换之前、期间和之后显示应有的信息。

Thanks!

EDIT

这是我的CommentComposeView:

import UIKit

class CommentComposeView: UIToolbar {
    var textView: SAMTextView!
    var sendButton: UIButton!

    private var didSetConstraints: Bool = false

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.initialize()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.initialize()
    }

    private func initialize() {
        textView = SAMTextView(frame: CGRectZero)
        sendButton = UIButton.buttonWithType(.System) as UIButton

        self.barStyle = .Black
        self.translucent = true

        textView.backgroundColor = UIColor.presentOffWhite()
        textView.font = UIFont.presentLightMedium()
        textView.layer.borderWidth = 0.5
        textView.layer.cornerRadius = 5
        textView.placeholder = "Comment"
        textView.scrollsToTop = false
        textView.textContainerInset = UIEdgeInsetsMake(4, 3, 3, 3)
        textView.keyboardAppearance = .Dark
        textView.keyboardType = .Twitter
        self.addSubview(textView)

        sendButton = UIButton.buttonWithType(.System) as UIButton
        sendButton.enabled = false
        sendButton.titleLabel!.font = UIFont.presentBoldLarge()
        sendButton.setTitle("Send", forState: .Normal)
        sendButton.setTitleColor(UIColor.whiteColor(), forState: .Normal)
        sendButton.setTitleColor(UIColor.presentCyan(), forState: .Highlighted)
        sendButton.setTitleColor(UIColor.presentLightGray(), forState: .Disabled)
        sendButton.contentEdgeInsets = UIEdgeInsetsMake(6, 6, 6, 6)
        self.addSubview(sendButton)

        RAC(self.sendButton, "enabled") <~ self.textView.rac_textSignal()
            .map { text in
                return (text as NSString).length > 0
        }

        textView.setTranslatesAutoresizingMaskIntoConstraints(false)
        sendButton.setTranslatesAutoresizingMaskIntoConstraints(false)
    }

    override func updateConstraints() {
        super.updateConstraints()

        if !didSetConstraints {
            // TODO: Replace raw constraints with a friendlier looking DSL
            self.addConstraint(
                NSLayoutConstraint(item: textView, attribute: .Left, relatedBy: .Equal, toItem: self, attribute: .Left, multiplier: 1, constant: 8)
            )

            self.addConstraint(
                NSLayoutConstraint(item: textView, attribute: .Top, relatedBy: .Equal, toItem: self, attribute: .Top, multiplier: 1, constant: 7.5)
            )

            self.addConstraint(
                NSLayoutConstraint(item: textView, attribute: .Right, relatedBy: .Equal, toItem: sendButton, attribute: .Left, multiplier: 1, constant: -2)
            )

            self.addConstraint(
                NSLayoutConstraint(item: textView, attribute: .Bottom, relatedBy: .Equal, toItem: self, attribute: .Bottom, multiplier: 1, constant: -8)
            )

            self.addConstraint(
                NSLayoutConstraint(item: sendButton, attribute: .Right, relatedBy: .Equal, toItem: self, attribute: .Right, multiplier: 1, constant: 0)
            )

            self.addConstraint(
                NSLayoutConstraint(item: sendButton, attribute: .Bottom, relatedBy: .Equal, toItem: self, attribute: .Bottom, multiplier: 1, constant: -4.5)
            )
        }
    }
}

这是 iOS8 的 inputAccessoryView 自动布局问题。问题是 UIToolbar 的 class 子视图_UIToolbarBackground在初始布局期间未正确定位。尝试做接下来的事情:

  1. Make CommentComposeView子类化UIView, not UIToolbar,添加实例UIToolbar作为子视图。
  2. 在您的内部使用自动布局蒙版(不是实际约束)CommentComposeView
  3. 覆盖-layoutSubviews在你的CommentComposeView像这样:
- (void)layoutSubviews
{
    [super layoutSubviews];

    contentToolbar.frame = self.bounds;
    sendButton.frame = CGRectMake(0.f, 0.f, 44.f, self.bounds.size.height);
    textView.frame = CGRectMake(44.f, 0.f, self.bounds.size.width - 44.f, self.bounds.size.height);
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift inputAccessoryView 覆盖错误 的相关文章

随机推荐

  • 在 R 中循环读取多个文件

    我一直想知道是否有人知道如何创建一个在 R 中加载文件 数据库的循环 假设我有一些这样的文件 data1 csv data2 csv data100 csv 在某些编程语言中 您可以执行类似 data x csv 的操作 系统会像 data
  • 从另一个类调用扩展 Thread 的类的方法

    我知道这是一个有点幼稚的问题 但我想了解java中多线程背后的基本工作原理 考虑下面的代码 假设 A 在主线程中执行 并开始执行在类 B 中定义的另一个工作线程 我想知道从 A 调用的 B func1 和 B 的 run 方法是否可以并行执
  • 使用 NestedScrollView 并向 ListView 下游提供 ScrollController

    我有一个NestedScrollView当我使用时 它可以很好地自动隐藏AppBar 我想要的一项功能 SliverAppBar 我遇到问题的地方是我使用ListView Builder作为下游的身体组件之一 我需要应用自己的ScrollC
  • Facebook 登录在发布应用程序之前可以使用发布 APK,但在发布相同 APK 后则不能使用

    Facebook 登录可以在发布应用程序之前使用发布 APK 但在 Play 商店中发布相同的 APK 后则不能使用 我正在尝试实施Facebook登入过去两天进入我的应用程序 我已遵循所有步骤并添加了两个密钥哈希 对于debug and
  • Symfony2:如何覆盖核心模板?

    我试图通过创建来覆盖 SymfonyGeneratorBundle 模板 app Resources SensioGeneratorBundle skeleton crud views index html twig 该文件应替换 vend
  • oracle视图和网络流量

    我真的无法理解这一行来自Oracle 电子商务套件开发人员指南 http docs oracle com cd E18727 01 doc 121 e12897 T302934T303920 htm方法 当使用视图时 网络流量被最小化 因为
  • 在 R 中使用 for 循环绘制许多直方图

    我有一个 csv 文件 其中包含如下数据 RI Na Mg Al Si K Ca Ba Fe Type 1 1 51793 12 79 3 50 1 12 73 03 0 64 8 77 0 00 0 00 BWF 2 1 51643 12
  • IIS 上的 WordPress 永久链接?

    我在 Windows 7 IIS 上使用 WordPress 进行开发 我正在 WordPress 中上传博客文章的图像 该图像在网站上显示良好 但一旦我启用永久链接 图像就不再起作用 并且以后上传的任何图像都会返回错误 HTTP Erro
  • Python urllib2 URLError HTTP 状态代码。

    我想在引发 URLError 异常时获取 HTTP 状态代码 我尝试过这个但没有帮助 except URLError e logger warning It seems like the server is down Code str e
  • 如何使用web-api上传文件

    客户端代码
  • libgdx- pixmap:我可以以某种方式改变线的宽度吗?

    我想画一条线 然后生成一个纹理 使用 libgdx 我发现使用像素图从圆形 矩形和线条创建纹理非常简单 但我没有找到如何设置绘制形状的线宽 是否可以设置像素图的线宽 这是我到目前为止得到的代码 我尝试画两个实心圆并用一条线将它们连接起来 P
  • 如何选择列名并将其用作 Python 中变量名的输入?

    原问题 我正在编写一个 while 循环来循环某些列 在这个 while 循环中 我想创建一个变量 其名称部分由它循环的列名组成 x 2 length len grouped class columns while x
  • Cocoa:NSApp beginSheet 设置应用程序委托?

    我正在尝试在我的应用程序中显示自定义工作表 但我认为我做错了什么 虽然一切seems为了工作得很好 我有一个相当奇怪的副作用 花了几个小时才弄清楚 事实证明 每次我在应用程序中显示工作表时 应用程序委托都会设置为工作表的实例 因此我的控制器
  • 在 CMake 中设置 Clang 库的路径

    我从 git 构建 llvm 并希望在项目中使用这些库 尤其是 libclang makefiles 是通过 CMake 生成的 对于 LLVM 部分 我找到了设置LLVM DIR重新路由 llvm 库的路径 但对于 Clang 我找不到这
  • R中的ggtern等高线图[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有这个数据文件 https www dropbox com s xk8zyu9f0rw77eu N90 p 0 350 eta 90 W
  • 如何使正则表达式的一部分可选?

    假设我有以下正则表达式 它与末尾带有分号的字符串相匹配 它将匹配除空字符串之外的任何字符串 如下所示 我尝试使用这个 但这没有用 我的问题是 我怎样才能使 的一部分 可选 因此用户不必在字符串中放置任何字符 为了使 可选 你可以这样做 被称
  • Eclipse 调试过滤不需要的包

    我已经使用 Eclipse 进行开发 2 年了 但是在调试过程中我仍然很难理解这个过滤器概念 我通常在远程端口模式下调试 大多数时候 My Eclipse 会捕获不需要的包中的断点 异常 包通常来自 Spring Java ThreadPo
  • 如何从 XML 文件中的特定节点获取值?

    从这个 XML 代码可以看出
  • 用于记录每一行代码的 C++ 宏

    在我最近与经理的一次讨论中 他提到他的一位前客户使用 C 宏来记录每行代码的信息 他们所要做的就是在开始运行之前启用环境变量 当然 环境变量仅在测试台中启用 日志还提到了所使用的变量及其相应的值 例如 对于该行 a a b 日志会显示如下内
  • Swift inputAccessoryView 覆盖错误

    我的外观遇到了奇怪的错误inputAccessoryView 在转换过程中 它看起来像这样 转换后 它应该出现 我像这样覆盖该属性 override var inputAccessoryView UIView get if composeV