繁体   English   中英

在更改其嵌套UILabel的同时移动UIView会使视图跳回到初始位置

[英]Moving a UIView while changing its nested UILabel causes the view to jump back to initial position

我正在尝试设置UISlider,以便在移动滑块时,拇指矩形上方会出现一个气泡,以显示当前值设置为什么。

单独移动视图的效果很好,但是当更改该视图内标签的值时,标签将快速“跳回”到我将UIView放置在情节提要板上的初始位置,当滑块碰到特定位置时跟踪。 然后,一旦拇指矩形移过轨道上的那个1像素,它就会跳回。

我已经制作了一个示例项目,可在此处复制该问题: https : //github.com/austinmckinley/SliderBubbleTest

另外,这是我的ViewController的外观。

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var slider: UISlider!
    @IBOutlet weak var bubble: UIView!
    @IBOutlet weak var bubbleLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    @IBAction func sliderMoved(sender: UISlider) {
        let sliderValue = lroundf(sender.value)

        let trackRect = sender.trackRectForBounds(sender.frame)
        let thumbRect = sender.thumbRectForBounds(sender.bounds, trackRect: trackRect, value: Float(sliderValue))
        bubble.center.x = thumbRect.midX

        slider.value = Float(sliderValue)

        // If this next line is commented, the jumping issue does not occur.
        bubbleLabel.text = String(sliderValue)
    }
}

自动版式会将气泡视图移回其约束所指定的位置。 代替改变气泡视图的帧的,创建一个@IBOutletNSLayoutContraint水平地定位所述气泡,然后改变constant该约束的属性来移动气泡。

如果将气泡的水平约束设为: Bubble.CenterX == Superview.Leading ,并将约束出口添加到代码中:

@IBOutlet weak var bubbleCenterX: NSLayoutConstraint!

然后,您只需要替换以下内容:

bubble.center.x = thumbRect.midX

与:

bubbleCenterX.constant = thumbRect.midX

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM