2

の外観で奇妙なバグが発生していinputAccessoryViewます。遷移の途中では、次のように表示されます。

中間移行

移行後、次のように表示されます。

ここに画像の説明を入力

次のようにプロパティをオーバーライドします。

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

        return composeView
    }
}

私がやっていることの明らかな欠陥を誰かが指摘したり、移行前、移行中、移行後にビューが本来あるべき姿で表示されるようにする方法についてさらに情報を提供したりできるかどうか疑問に思っています。

ありがとう!

編集

これが私のもの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)
            )
        }
    }
}
4

1 に答える 1

2

これは、inputAccessoryView 自動レイアウトに関する iOS8 の問題です。問題は、クラスの UIToolbar のサブビューが_UIToolbarBackground初期レイアウト中に適切に配置されないことです。次のことを試してください。

  1. ではなく、CommentComposeViewサブクラス化を行い、サブビューとしてのインスタンスを追加します。UIViewUIToolbarUIToolbar
  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);
} 
于 2014-09-08T16:03:54.857 に答える