9

默认情况下,accessoryViewonUITableViewCell位于单元格的最右侧。我正在对 进行子类化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];
}

在此处输入图像描述

4

4 回答 4

7

在你的单元子类中实现layoutSubviews,调用 super 作为你做的第一件事,然后修改你想要改变的子视图的框架。

于 2013-05-27T20:04:40.740 回答
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; });
于 2014-01-30T18:02:40.940 回答
0

根据马特的提示,我发现这样做的唯一方法是使用我自己的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;
于 2013-05-28T20:31:30.583 回答
0

最简单的方法是定义一个自定义单元格,将 Accessory 设置为 none,将代表附件视图的 imageview 放置在您喜欢的任何位置,并为该单元格定义一个点击手势处理程序(如果您想将点击手势限制为仅图像,只需将点击手势添加到 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
}
于 2021-03-24T22:51:11.540 回答