默认情况下,accessoryView
上的UITableViewCell
位于单元格的最右侧。我正在对UITableViewCell
进行子类化以尝试更改此位置以将其移动到更左侧,但是,它没有效果并且它保持在右侧。关于如何做到这一点的任何想法?
- (void) layoutSubviews
{
[super layoutSubviews];
self.accessoryView.frame = CGRectMake(100, self.accessoryView.frame.origin.y, self.accessoryView.frame.size.width, self.accessoryView.frame.size.height);
self.accessoryView.layer.borderWidth = 1;
self.accessoryView.layer.borderColor = [[UIColor redColor] CGColor];
}
答案 0 :(得分:6)
在您的单元子类中实现layoutSubviews
,首先调用super,然后修改要更改的子视图的帧。
答案 1 :(得分:1)
这类似于Flea的解决方案;按给定的数量而不是固定的帧推送图像:
static CGFloat const kRightOffset = 10.0;
cell.accessoryView = ({UIImageView * imgV = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"image.png"]];
CGRect frame = imgV.frame;
frame.size.width = frame.size.width + kRightOffset;
imgV.frame = frame;
[imgV setContentMode:UIViewContentModeLeft];
imgV; });
答案 2 :(得分:0)
根据Matt的提示,我发现这样做的唯一方法就是使用我自己的UIImageView
并使用我选择的图像,然后将frame
坐标设置为我需要的坐标。这允许accessoryView
扩展。显然,这是操纵它的唯一方法。
UIImage *indicatorImage = [UIImage imageNamed:@"BV-icon_57x57"];
UIImageView *view = [[UIImageView alloc] initWithImage:indicatorImage];
view.frame = CGRectMake(0, 0, 100, 20);
[view setContentMode:UIViewContentModeLeft];//without this line the image will just be stretched;
cell.accessoryView = view;
答案 3 :(得分:0)
最简单的方法是定义一个自定义单元格,将 Accessory 设置为 none,在您喜欢的任何地方放置一个代表附件视图的 imageview,并为单元格定义一个点击手势处理程序(如果您想限制点击仅对图像进行手势,只需将点击手势仅添加到图像视图而不是整个单元格)。这提供了很大的灵活性,而且我们不必处理附件视图带来的烦恼(至少对我来说 - 我不喜欢单元格右侧的边框)
在您的自定义单元设置代码中:
let tap = UITapGestureRecognizer(target: self, action: #selector(onCellTapped(_:)))
self.contentView.addGestureRecognizer(tap)
@objc private func onCellTapped(_: Any) {
//your code here - i added an imageview that changes image on user tap - to indicate selected/deselected
}