2016-04-26 8 views
0

ちょっと私はUIViewの中にUITextViewを持っています。 this solution自動レイアウトをオフにして内容をラップするようにUIViewのサイズを変更します

私は自動レイアウトを無効にしています(sizeToFit()のような他のソリューションは自動レイアウトをオンにしていませんでした)が、これを行うとすべてのコンテンツテキストビューのレンダリングが行われると、UIViewの境界をオーバーフローします。

私はそれもコンテナのテキストビューのために働いたのと同じ解決策を使用しようとしましたが、何もしませんでした。

仕事に思えるん一つのことがある:

newFrame = containerView.frame 
newFrame.size.height = textView.frame.size.height 
containerView.frame = newFrame 

しかし、これは、それは高さがあることはできませんですので、私はまた、このコンテナビューでラベルのカップルを持っているよだって私は必要なものではありませんテキストフィールドと同じです。

自動レイアウトを再度オンにしないとこれを修正する方法はありますか?自動レイアウトをオンにするとこれを修正すれば、テキストビューの動的なサイズを維持する方法があります(それをオンにすると、それを破ることになります)。

私は非常にこれに新しいです。ヘルプをよろしくお願いいたします。

ああ、私は実際にiOSのものではなく、tvOSアプリケーションを開発しています。それが違いを生むならば、ダンノ。

EDIT:

ここでは、実際のコードがあります:

@IBOutlet weak var container: UIView! 
@IBOutlet weak var label: UILabel! 
@IBOutlet weak var text: UITextView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    print(text.frame.origin.x, text.frame.origin.y) 

    text.scrollEnabled = false 

    text.text = "bla blah blah blah boo boo boo boooooo boo blah yo yo yo yo yo hello" 
    let fixedWidth = text.frame.size.width 
    let newSize = text.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max)) 
    var newFrame = text.frame 
    newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height) 
    text.frame = newFrame 
} 

これは動的テキストビュー時にコンテンツの変更を展開します。追加:

newFrame = containerView.frame 
newFrame.size.height = textView.frame.size.height 
containerView.frame = newFrame 

容器UIViewのサイズを変更し、そのように単にテキストビューと重なる容器に他の要素を追加テキストビュー0のtext.frame.origin.yを行います。

答えて

0

これは、オートレイアウトまたはフレーミングの両方で実現できます。フレームを使用している場合は、containerView内の他のすべてのコンポーネントの高さを考慮する必要があります。あなたは15ポイントを持つのTextView上記1及び2、その下の3つのラベルを、持っていると言うことは、それぞれの間の垂直距離を持つことができます、そしてあなたのcontainerViewの高さは、次のようになります。あなたはコンポーネント間の適切な垂直方向の制約を設定する必要が自動レイアウトで

newFrame = containerView.frame 
newFrame.size.height = 15 + label1.frame.size.height + 15 + textView.frame.size.height + 15 + label2.frame.size.height + 15 + lable3.frame.size.height + 15 
containerView.frame = newFrame 

それに応じてサイズを変更します。

+0

だから私は実際に私の異なるコンポーネントの間にあるパディングをハードコーディングし、それらを一緒に追加する必要がありますか?それは非常にきれいではないですか?私は本当に垂直の制約を少しも得ていませんでした。私はそれが動的にサイズを変更するためにUIViewで使用できる何かですか? – alokraop

+0

それは明らかではありませんが、Autolayoutの前にはオプションでしたが、定数部分を直接45にハードコーディングすることができます。Autolayoutについては、https://www.raywenderlich.com/110393/auto-layout-visual-format-languageチュートリアル –

+0

ちょっと詰め物の高さを追加できませんでした。テキストビューの高さをコンテナに代入すると、テキストビューの原点が何らかの形で変更されるので、その上にある他のコントロールと重なることになります。理由は考えられません。 – alokraop

関連する問題