カスタムのキーボードを使用して入力する4つのラベルがあるアプリを作成しています。最後の行の直後のテキストフィールドに通常の行を模倣する必要があります。私のtextLabelsは角の半径を持っているので、私は境界や影を使って問題を解決することはできません。キャリッジラインを模倣する最良の方法は何ですか?
私は同じビューを作成したが、0角の半径を、私は私が必要な場所で行を取得するために管理してきましたが、その位置は固定されている理由です@IBOutlet weak var xField: InsetLabel!
@IBOutlet weak var yField: InsetLabel!
@IBOutlet weak var wField: InsetLabel!
@IBOutlet weak var hField: InsetLabel!
var textfields: [InsetLabel] = []
@IBOutlet weak var xSuppView: UIView!
@IBOutlet weak var ySuppView: UIView!
@IBOutlet weak var hSuppView: UIView!
@IBOutlet weak var wSuppView: UIView!
var suppViews: [UIView] = []
override func viewDidLoad(){
super.viewDidLoad()
textfields = [xField, yField, wField, hField]
suppViews = [xSuppView, ySuppView, wSuppView, hSuppView]
for (index, view) in textfields.enumerated() {
let carriageView = UIView()
let width: CGFloat = 2.0
let x = view.frame.maxX + width
let y = view.frame.minY
let height = view.frame.height
carriageView.frame = CGRect(x: x, y: y, width: 2, height: height)
carriageView.layer.masksToBounds = true
carriageView.layer.cornerRadius = 2
carriageView.backgroundColor = ColorConstants.carriageColor
carriages.append(carriageView)
suppViews[index].addSubview(carriageView)
suppViews[index].translatesAutoresizingMaskIntoConstraints = false
let trailingConstraint = NSLayoutConstraint(item: carriageView, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: 0)
let heightConstraint = NSLayoutConstraint(item: carriageView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .height, multiplier: 1, constant: height)
let topSpaceConstraint = NSLayoutConstraint(item: carriageView, attribute: .centerY, relatedBy: .equal, toItem: suppViews[index], attribute: .centerY, multiplier: 1, constant: 0)
carriageView.addConstraints([trailingConstraint, heightConstraint, topSpaceConstraint])
view.sizeToFit()
view.layer.masksToBounds = true
view.layer.cornerRadius = 4
}
}
。
let carriageView = UIView()
let width: CGFloat = 2.0
let x = view.frame.maxX + width
let y = view.frame.minY
let height = view.frame.height
carriageView.frame = CGRect(x: x, y: y, width: 2, height: height)
carriageView.layer.masksToBounds = true
carriageView.layer.cornerRadius = 2
carriageView.backgroundColor = ColorConstants.carriageColor
carriages.append(carriageView)
suppViews[index].addSubview(carriageView)
}
だから、それは私のtextLabelの幅で移動するために私がプログラムによってこの行に制約を追加しましたが、コンパイラがそれを好きではありません。この制約はストーリーボードの制約と矛盾しているようです。基本的には、1つのスーパービューの2つのサブビューを共通の側で制約する必要があります。私は間違って何をしていますか?これはエラーの一部です
When added to a view, the constraint's items must be descendants of that view (or the view itself). This will crash if the constraint needs to be resolved before the view hierarchy is assembled. Break on -[UIView(UIConstraintBasedLayout) _viewHierarchyUnpreparedForConstraint:] to debug.
btwは、私がストーリーボードにあるほとんどすべてのビューをインスタンス化するための悪いプログラミングスタイルですか?プログラムですべてを作成する方法を学習する必要がありますか?
EDIT
エラーは、私がビューに制約を追加ラインに表示されます。
carriageView.addConstraints([trailingConstraint, heightConstraint, topSpaceConstraint])
は、それは私がのviewDidLoadで作成したストーリーボードで作成したサブビューと、サブビューを、持っている、と私はコードでそれらを制約しようとしていますので、OKですか?
EDIT
私はこのビューを作成することは、プログラム悪い考えだったこと、考え出したので、私はちょうど主要なスペースにただ1制約を追加するよりも、インターフェースビルダーで各ラベルにビューを追加しました。プログラマチックなアプローチよりもはるかに簡単です
いくつかのアラームが最初にこの質問で鳴っていました。私は間違っていた。上院議員。あなたの最後の質問としては、正当な理由がある限り、コード内でのみ動作すること(特に自動レイアウトを使用する場合)はありません。私はiPadのものが肖像画か風景かを知る必要がありました。私は風景を左または右にしたいので、最初はコードを試しました。それは(コードで)働いたが、その後、私はアプリケーションの拡張機能(写真の編集)を追加し、私のコードはヒットしていませんでした。 **それは正当な理由です。**私にとってこれは良い理由のようにも聞こえます。 – dfd
あなたの質問を賞賛しましたので、もうひとつ注意してください。表示されているエラーは、ビュー階層内の同じノードにない2つのビュー間で制約があることを示唆しています。これはいくつかのことが原因である可能性があります。ビュー階層を設定したコードを表示できますか(IBまたはaddSubviewにありますか)?また、可能であれば、エラーを返すコードの正確な行を指摘できますか? – dfd
私はあなたの質問を理解していません。すべてのUITextFieldにカーソルがあります。あなたはあなたのラインとあなたのラインなしで現在の外観をどのようにスクリーンショットを作ることができますか? – muescha