当删除按钮显示时调整UITableViewCell内容的大小

时间:2010-12-08 17:46:06

标签: objective-c ios uitableview autoresizingmask

有没有办法使用自动调整大小的屏幕移动我的内容,以便删除按钮不会覆盖它?谷歌搜索告诉我,我需要在子视图上设置UIViewAutoresizingFlexibleRightMargin的自动调整掩码。在我看来,UIViewAutoresizingFlexibleWidth实际上更有意义;虽然我已经尝试过它们并且都不起作用。

我想缩小的视图只是一个标签,它是单元格contentView的子视图。我不确定当删除按钮出现时,contentView本身是否会自动调整大小;但似乎不是;否则我的autoresizing面具应该有效。

如果删除按钮的存在不会导致任何视图的大小调整;无论如何我可以手动完成这个吗?

3 个答案:

答案 0 :(得分:4)

你应该使用UIViewAutoresizingFlexibleLeftMargin。

这就是原因。您希望您的内容向左移动,基本上使得看起来像删除按钮正在向左推送内容,而不是它的方式。 flexibleLeftMargin基本上意味着你的UILabel将保持固定在contentView的右侧。你想要这个的原因是因为删除按钮实际上导致你的contentView缩小它的宽度。

UILabel的autoresizingmask指的是它在contentView内的行为,而不是单元格。

试一试,它应该有用。

答案 1 :(得分:3)

这个问题真的很陈旧,但我觉得我应该回答这个问题,因为我自己找到了解决方案。

仅显示单元格的ContentView,并显示确认按钮。如果不将视图(标签,图像视图等)添加到cell.contentView而不是直接将它们添加到单元格中,则在调整contentView的大小时不会调整它们的大小。就我而言,我直接将它添加到单元格中。

所以,不要做类似的事情:

UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, width-10, 20)];
[nameLabel setFont:[UIFont boldSystemFontOfSize:16]];
[nameLabel setHighlightedTextColor:[UIColor whiteColor]];
[nameLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
[nameLabel setTag:101];
[cell addSubview:nameLabel];
[nameLabel release];

你应该这样做:

UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, width-10, 20)];
[nameLabel setFont:[UIFont boldSystemFontOfSize:16]];
[nameLabel setHighlightedTextColor:[UIColor whiteColor]];
[nameLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
[nameLabel setTag:101];
[[cell contentView] addSubview:nameLabel]; // <<--- note the change in this line!
[nameLabel release];

希望这可以帮助那些偶然发现这个问题的人。

答案 2 :(得分:1)

我使用的是iOS 7,我遇到了同样的问题。我正在为启用了自动布局的UITableViewCell使用单独的xib,因此只需在标签上添加一个约束,以便在右侧有一个固定的间隙。