我已经构建了一个应用程序,在该应用程序中,需要移动一个与其所选索引相对应的UISegmentedControl。我使用这段代码来实现如下目的:
- (IBAction)segmentControlAction:(id)sender {
// Change which container will be visible
int selectedIndex = self.overviewSegmentControl.selectedSegmentIndex;
if (selectedIndex == 0) {
// Show details and hide reviews & related
// SHOW THE DETAILS
[self showDetails];
} else if (selectedIndex == 1) {
// Show Reviews and hide details & related
// SHOW THE REVIEWS
[self showOther];
} else if (selectedIndex == 2) {
// Show related and hide details & reviews
}
}
-(void)showOther {
// Animate the reviews
[UIView animateWithDuration:.5 delay:0 usingSpringWithDamping:.9 initialSpringVelocity:1 options:UIViewAnimationOptionTransitionNone animations:^{
// Hide details controls
self.profileImageView.alpha = 0;
self.seperatorImageView.alpha = 0;
self.byLabel.alpha = 0;
self.authorLabel.alpha = 0;
// Move segmentControl
[self.overviewSegmentControl setFrame:CGRectMake(self.overviewSegmentControl.frame.origin.x, self.previewImageView.frame.size.height + 8, self.overviewSegmentControl.frame.size.width, self.overviewSegmentControl.frame.size.height)];
}completion:^(BOOL finished) {
// Completed
}];
}
-(void)showDetails{
// Animate the details
[UIView animateWithDuration:.5 delay:0 usingSpringWithDamping:.9 initialSpringVelocity:1 options:UIViewAnimationOptionTransitionNone animations:^{
// Move segmentControl
[self.overviewSegmentControl setFrame:CGRectMake(self.overviewSegmentControl.frame.origin.x, self.previewImageView.frame.size.height + 85, self.overviewSegmentControl.frame.size.width, self.overviewSegmentControl.frame.size.height)];
// Hide details controls
self.profileImageView.alpha = 1;
self.seperatorImageView.alpha = 1;
self.byLabel.alpha = 1;
self.authorLabel.alpha = 1;
}completion:^(BOOL finished) {
// Completed
}];
}此代码移动UISegmentedControl,但在执行实际移动之前将其恢复到原来的位置。这导致控制发生了奇怪的跳跃。
我的UIViewController:

在这里,您可以看到我的约束:


,请有人解释一下这是如何工作的,以及如何用约束来移动控件而不是设置框架?
谢谢!埃里克
发布于 2014-10-24 22:49:21
例如,您可以从段控制器“设置”一个约束到顶部:“顶层空间”,并相应地修改该约束。
这里有一个例子testMovingControll
发布于 2014-10-24 21:59:02
您可以在运行时编程地修改约束对象的".constant“属性,以设置定位和/或大小值。您可以在视图控制器的updateConstraints方法中这样做。
您可以将情节提要中的约束绑定到代码中的属性,就像绑定其他对象一样:控件-单击-从对象拖动到源代码窗口。然后,您可以在运行时访问它们。
另外,请确保将translatesAutoresizingMaskIntoConstraints设置为FALSE,否则可能会受到冲突约束。
https://stackoverflow.com/questions/26556083
复制相似问题