0

uipresentationcontroller api ビューから提示されたものを使用して見積もりを提示しようとしていますが、機能していません。私は何を間違っていますか?また、提示されたビューのサイズを動的に変更してテキストに合わせるにはどうすればよいですか? ありがとう。

これは私のコードです:

override func presentationTransitionWillBegin() {

    presentedView()!.layer.cornerRadius = 15.0

    //adding label for quote to the presented view
    let label = UILabel(frame: CGRectMake(presentedView()!.frame.origin.x, presentedView()!.frame.origin.y, presentedView()!.bounds.width, presentedView()!.bounds.height))
    label.center = presentedView()!.center
    label.textAlignment = NSTextAlignment.Center
    label.text = readQuotesFromLibrary()
    presentedView()?.addSubview(label)
    //rest of the code dealing with uipresentationcontroller goes here ...

ご覧のとおり、テキストがオフになっています }

4

3 に答える 3

0

あなたの場合のように、時々意図しない結果をもたらすために CGRects を作成することがわかりました。別の方法を試してみたい場合は、レイアウトの制約をお勧めします。以下のコードがうまくいくと思います。

override func presentationTransitionWillBegin() {

    presentedView()!.layer.cornerRadius = 15.0

    //adding label for quote to the presented view
    let label = UILabel()
    label.text = readQuotesFromLibrary()
    label.textAlignment = NSTextAlignment.Center

    presentedView()!.addSubview(label)
    label.translatesAutoresizingMaskIntoConstraints = false
    label.widthAnchor.constraintEqualToAnchor(presentedView()!.widthAnchor).active = true
    label.heightAnchor.constraintEqualToAnchor(presentedView()!.heightAnchor).active = true
    label.centerXAnchor.constraintEqualToAnchor(presentedView()!.centerXAnchor).active = true
    label.centerYAnchor.constraintEqualToAnchor(presentedView()!.centerYAnchor).active = true

    //rest of the code dealing with uipresentationcontroller goes here ...

スクリーンショットの引用がpresentationViewに収まらないため、テキストの折り返しの問題が発生しても驚かないでしょう。その場合、attributedString を使用して、文字列が複数行にまたがるようにすることができます。ラベルが複数行にまたがるようにするには、さまざまな方法があります。したがって、これを行う方法は attributedString だけではありません。

それが役立つことを願っています!本当に CGRect の方法を使用する必要があり、これが役に立たない場合は申し訳ありません。

于 2016-07-29T18:23:01.230 に答える
0

UILabel のフレームは、この場合は presentedView であり、presentedView が上にあるビューではなく、そのスーパービューに相対的です。したがって、次の行でラベルをインスタンス化する必要があります。

let label = UILabel(frame: CGRectMake(0, 0, presentedView()!.bounds.width, presentedView()!.bounds.height))

これにより、UILabel の左上隅がpresentedView の左上隅に配置され、presentedView と同じ幅と高さが与えられます。

于 2016-03-25T17:53:22.910 に答える