如何在Swift中以编程方式移动UIView

iKK*_*iKK 11 move uiview swift

问题是在Swift中以编程方式移动"InfoView"(UIView).

故事板中存在以下约束(请参见图像):

在此输入图像描述

现在,我想在"MyView"中向上或向下移动"InfoView".

我试过了:

@IBOutlet weak var infoTextLabel: UILabel!
@IBOutlet weak var infoTextLabelView: UIView!

// set infoTextLabel color
self.infoTextLabel.textColor = UIColor.blackColor()
// set infoTextLabel text
self.infoTextLabel.text = "hello"
// unhide infoTextLabel
self.infoTextLabel.hidden = false

// For the moving in Y-direction, I tried this - but does not work !!!!!!!
self.infoTextLabelView.frame.origin.y += 200
Run Code Online (Sandbox Code Playgroud)

Autolayout约束能否发挥作用.如何以编程方式克服这些问题.或者是frame.origin.y方法错了?

感谢任何帮助!

Dar*_*lay 24

使用约束时,您永远不想直接设置视图的框架.相反,重新配置约束并让自动布局引擎为您设置视图的框架.在视图控制器中创建一个IBOutlet,以存储对"Center Y Alignment constraint"的引用.确保将其连接到storyboard或xib中.

@IBOutlet var yConstraint: NSLayoutConstraint
Run Code Online (Sandbox Code Playgroud)

然后,您可以设置约束的常量属性以将其从Y位置偏移(正数将向下移动,负向移动它).

yConstraint.constant = 200
Run Code Online (Sandbox Code Playgroud)

这会使你的观点下移200点.


Pat*_*nch 10

请参阅我对使用自动布局以编程方式移动视图的好方法的另一个问题的答案:https: //stackoverflow.com/a/30687856/3149796

此外,根据您的效果和UI的其他要求,您也可以通过变换实现此目的,而不会干扰您的自动布局.

// Create a new transform
self.infoTextLabelView.transform = CGAffineTransformMakeTranslation( 0.0, 200.0 )

// Or modify existing transform
self.infoTextLabelView.transform = CGAffineTransformTranslate( self.infoTextLabelView.transform, 0.0, 200.0  )
Run Code Online (Sandbox Code Playgroud)


小智 8

雨燕5

使用 CGAffineTransform

@IBOutlet weak var mainCurtain: UIView!

func moveUp() {
    UIView.animate(withDuration: 0.5, delay: 0.0, options:[], animations: {
        self.mainCurtain.transform = CGAffineTransform(translationX: 0, y: 0)
    }, completion: nil)
}


func moveDown() {
    UIView.animate(withDuration: 0.5, delay: 0.0, options:[], animations: {
        let screenSize = UIScreen.main.bounds.size
        self.mainCurtain.transform = CGAffineTransform(translationX: 0, y: screenSize.height * 0.5)
    }, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)


ZAF*_*007 7

斯威夫特4

UIView.animateKeyframes(withDuration: 0.25, delay: 0.0, options: UIViewKeyframeAnimationOptions(rawValue: 7), animations: {
       self.infoTextLabelView.frame.origin.y+=200

},completion: nil)
Run Code Online (Sandbox Code Playgroud)