我有UISegmentedcontrol
(有2个段)和UIView
。由于最小段数为2,我不想隐藏segmentedcontrol
并添加UILabel
。
这就是模拟器中的样子:
(红色是UIView
。)
这是我的代码:
[self.segment setHidden:YES];
CGRect segmentFrame = self.segment.frame;
segmentFrame.size.width /= 2;
UILabel *myLabel= [[UILabel alloc] initWithFrame:segmentFrame];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection:0];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
[cell.contentView addSubview:myLabel];
正如您在上图所示,我已应用自动布局。隐藏view
隐藏并添加label
后,view
不会移到左侧。所以我尝试以编程方式移动它(在应用自动布局时可能不应该这样做):
CGRect myViewFrame = self.myView.frame;
myViewFrame.origin.x -= segmentFrame.size.width;
self.myView.frame = myViewFrame;
那仍然无效。我的问题是:当view
被隐藏时,如何让segmentedcontrol
向左移动?
答案 0 :(得分:2)
如果您使用autolayout
,更好的方法是以编程方式修改autolayout constraints
。
请按照以下步骤操作:
在IBOutlet
文件中创建viewController.h
:
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *nameButtonVerticalConstraint;
现在将其与相关的自动布局约束连接起来:
现在您可以像这样简单地更改约束:
self.nameButtonVerticalConstraint.constant=25;
如果你想要更平滑的过渡,你可以把它放在一个动画块中:
[UIView animateWithDuration:1.2 delay:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.nameButtonVerticalConstraint.constant=50;
[self.view layoutIfNeeded];
} completion:nil];
编辑:这里摘自this文章
如果由于更新上述约束而影响其他约束,则还必须调用以下内容:
[viewForUpdate setNeedsUpdateConstraints];
现在,通过在动画块中调用
layoutIfNeeded
来为视图设置动画。
答案 1 :(得分:1)
为超级视图添加前导空格的约束。在你的.h:
IBOutlet NSLayoutConstraint *leftSpace;
将它从Interface Builder中的“连接”选项卡拖到您为超级视图设置的前导空间约束。无论您何时尝试在.m文件中以编程方式移动它,请将leftSpace属性设置为您想要的宽度,如下所示:
leftSpace.constant = *the width you would like*;
希望有所帮助!
答案 2 :(得分:1)
将分段控件的宽度约束连接到属性并以编程方式将其值更改为0,然后重新布局视图(您可能还希望将分段控件与视图之间的间隙归零 - 使用相同的接近那里)。