iOS 7 对附件视图和附件类型的布局不同?

Posted

技术标签:

【中文标题】iOS 7 对附件视图和附件类型的布局不同?【英文标题】:iOS 7 lays out accessoryView and accessoryType differently? 【发布时间】:2013-09-25 21:56:52 【问题描述】:

还有其他人注意到 ios 7 对自定义附件视图的布局与内置的附件类型不同吗?

像这样:

上面的一个是使用:

cell.accessoryView = cell.accessoryButton;

(其中 accessoryButton 是一个自定义的 UIButton),而第二个是使用:

cell.accessoryView = nil;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

相同的代码、相同的应用、相同的 Xcode,但在 iOS 6 上运行:

这是 SDK 中的错误吗?或者我可以通过代码控制的东西?

【问题讨论】:

自动布局的工作方式发生了一些变化,请查看转移到 ios7 的文档。 (cba找链接抱歉) 【参考方案1】:

如果您对UITableViewCell 进行子类化,您可以在layoutSubviews 中对其进行调整

- (void)layoutSubviews 
    [super layoutSubviews];

    CGRect accessoryViewFrame = self.accessoryView.frame;
    accessoryViewFrame.origin.x = CGRectGetWidth(self.bounds) - CGRectGetWidth(accessoryViewFrame);
    self.accessoryView.frame = accessoryViewFrame;

【讨论】:

如果你没有子类化单元格? 不再在 iOS 8 中工作? accessoryViewFrame.sizeaccessoryViewFrame.origin 的所有值都等于 0。 是的,从 iOS8 和 iOS9 开始,accessoryView 框架为“(CGRect) _accessoryFrame = (origin = (x = 0, y = 0), size = (width = 0, height = 0))” 【参考方案2】:

添加子视图而不是附件视图

UIButton *indicatorBtn = [UIButton  buttonWithType:UIButtonTypeCustom];
indicatorBtn.frame = CGRectMake(cell.contentView.frame.size.width-55, 2, 50, 50);
[indicatorBtn setBackgroundImage:[UIImage imageNamed:@"right_indicator.png"] 
                     forState:UIControlStateNormal];
indicatorBtn.backgroundColor = [UIColor clearColor];
//indicatorBtn.alpha = 0.5;
indicatorBtn.tag = indexPath.row;
[indicatorBtnaddTarget:self action:@selector(method:) 
    forControlEvents:UIControlEventTouchUpInside];

[cell.contentView addSubview:indicatorBtn];

【讨论】:

以上是关于iOS 7 对附件视图和附件类型的布局不同?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 – 隐藏的输入附件视图显示在 bannerViewActionShouldBegin:willLeaveApplication: 之后

在ios 7中,UITableViewCell Accessory DetailDisclosureButton分为两个不同的附件按钮

IOS 使用输入附件视图切换预测文本视图

将附件视图添加到“打开/保存”对话框时,布局约束不良

iOS 15 对 NSAttributedString 的图像附件行为不同。如何固定标签的高度?

带有附件视图的 iOS 8 自调整单元格