执行动画以减小桌面视图宽度时,“废纸篓”按钮会在动画实际开始之前先跳到左侧。 动画在ViewController中执行。
- (void)viewDidLoad {
[super viewDidLoad];
self.tableViewRefresh.dataSource = self;
self.tableViewRefresh.delegate = self;
// Do any additional setup after loading the view.
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 2;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *simpleTableIdentifier = @"cell1";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 1.0f;
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
按钮有一个约束,因此从表格视图单元格的右侧(它是一个xib)始终是8像素。
我希望/期望的是按钮随着tableview宽度变化的动画及时滑过。我错误地认为自动布局可以解决这个问题吗?
我可以在桌面视图上调用UIView.Animate(0.05d, 0.15d, UIViewAnimationOptions.CurveEaseInOut, () =>
{
OrderProductsTableView.Frame = new CGRect(LeftPanel.Frame.Width + 130f, OrderProductsTableView.Frame.Location.Y, View.Frame.Size.Width - LeftAddProductPanel.Frame.Width, OrderProductsTableView.Frame.Size.Height);
RightPanelFooter.Alpha = 0;
}, null);
并在reloadData()
中手动重新定位按钮,但希望有一种更优雅的方式。
答案 0 :(得分:1)
您还需要为按钮设置动画。您可以使用以下命令获取对单元格的引用:
List<UITableViewCell> cells = OrderProductsTableView.VisibleCells.ToList();
然后遍历单元格并修改x位置,例如:
UIView.Animate(0.05d, 0.15d, UIViewAnimationOptions.CurveEaseInOut, () =>
{
foreach (UITableViewCell cell in cells)
{
MyCellType mCell = cell as MyCellType;
mCell.trashButton.Frame = new CGRect(newXValue, newYValue, newWidthValue, newHeightValue);
}
}, null);
然后还会像您已经完成的那样设置表视图宽度的动画。动画应该同时运行,并且您的按钮应该与表视图宽度的动画一起移动。
答案 1 :(得分:0)
这是一个自动布局问题,请确保创建2个水平间距约束,其中“更多或相等”&gt; =您想要的最小宽度,“小于或等于”&lt; =您想要的最大空间。< / p>
请不要犹豫,了解更多信息