我试图使用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 ...
答案 0 :(得分:0)
如果您要将呈现的视图框架分配给标签,那么为什么需要将呈现的视图中心分配给标签中心。标签将被绘制为呈现的视图框架。
答案 1 :(得分:0)
你的UILabel的框架是相对于它的superview,在这种情况下是presentView,而不是presentView在其上面的视图。因此,您应该使用以下行来实例化标签:
let label = UILabel(frame: CGRectMake(0, 0, presentedView()!.bounds.width, presentedView()!.bounds.height))
这会将UILabel的左上角放在presentView的左上角,并为其提供与presentView相同的宽度和高度。
答案 2 :(得分: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并允许字符串跨越多行。有多种方法可以让标签跨越多条线;所以belongsString不是唯一的方法。
我希望有所帮助!很抱歉,如果你真的需要采用CGRect方式,并且不会发现它有用。