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

如果您将呈现视图的框架分配给标签,那么为什么需要将呈现视图的中心分配给标签中心。标签将被绘制为呈现视图的框架。

于 2016-03-25T13:19:04.463 回答
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;在这种情况下,您可能希望使用属性字符串并允许字符串跨越多行。有多种方法可以让标签跨越多行;所以属性字符串不是唯一的方法。

我希望这会有所帮助!抱歉,如果您真的需要采用 CGRect 方式并且没有发现这很有用。

于 2016-07-29T18:23:01.230 回答
0

你的 UILabel 的框架是相对于它的超级视图,在这种情况下是呈现视图,而不是呈现视图顶部的视图。因此,您应该使用以下行实例化标签:

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

这会将 UILabel 的左上角放置在presentedView 的左上角,并赋予它与presentView 相同的宽度和高度。

于 2016-03-25T17:53:22.910 回答