Tom*_*men 107 iphone width uitableview ios
我已经为此工作了大约2天,所以我想我和你分享我的经验.
问题是:是否可以使分组的UITableView中的单元格宽度更小?
答案是不.
但是有两种方法可以解决这个问题.
解决方案#1:更薄的表 可以更改tableView的框架,以便表格更小.这将导致UITableView以减小的宽度渲染内部单元格.
对此的解决方案可能如下所示:
-(void)viewWillAppear:(BOOL)animated
{
CGFloat tableBorderLeft = 20;
CGFloat tableBorderRight = 20;
CGRect tableRect = self.view.frame;
tableRect.origin.x += tableBorderLeft; // make the table begin a few pixels right from its origin
tableRect.size.width -= tableBorderLeft + tableBorderRight; // reduce the width of the table
tableView.frame = tableRect;
}
Run Code Online (Sandbox Code Playgroud)
解决方案#2:让图像呈现细胞
此解决方案在此处描述:http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
我希望这些信息对您有所帮助.我花了大约2天时间尝试了很多可能性.这就是剩下的.
an0*_*an0 226
实现这一目标的更好,更简洁的-setFrame:
方法是继承UITableViewCell并重写其方法,如下所示:
- (void)setFrame:(CGRect)frame {
frame.origin.x += inset;
frame.size.width -= 2 * inset;
[super setFrame:frame];
}
Run Code Online (Sandbox Code Playgroud)
为什么更好?因为其他两个更糟糕.
调整表视图宽度 -viewWillAppear:
首先,这是不可靠的,超视图或父视图控制器可以在-viewWillAppear:
调用之后进一步调整表视图帧.当然,您可以-setFrame:
为UITableView创建子类和覆盖,就像我在这里为UITableViewCells做的那样.但是,子类化UITableViewCells是一种非常常见,轻巧和Apple的方式.
其次,如果您的UITableView具有backgroundView,则不希望将其backgroundView缩小到一起.在缩小UITableView宽度的同时保持backgroundView宽度并非易事,更不用说在超级视图之外扩展子视图并不是一件非常优雅的事情.
自定义单元格渲染以伪造更窄的宽度
要做到这一点,您必须准备具有水平边距的特殊背景图像,并且您必须自己布置单元格的子视图以适应边距.相比之下,如果您只是调整整个单元格的宽度,自动调整将为您完成所有工作.
JuJ*_*oDi 14
要在Swift中执行此操作,它不提供设置变量的方法,您必须覆盖setter frame
.最初发布(至少在我发现的地方)这里
override var frame: CGRect {
get {
return super.frame
}
set (newFrame) {
let inset: CGFloat = 15
var frame = newFrame
frame.origin.x += inset
frame.size.width -= 2 * inset
super.frame = frame
}
}
Run Code Online (Sandbox Code Playgroud)
如果没有任何作用你可以试试这个
将单元格的背景颜色设置为清晰颜色,然后放置具有所需大小的单元格图像.如果要在该单元格上显示一些文本,请在图像上方放置一个标签.不要忘记将标签的背景颜色设置为清晰的颜色.
我发现接受的解决方案在轮换时不起作用.为了实现具有固定宽度和灵活边距的UITableViewCells,我只是将上述解决方案改编为以下内容:
- (void)setFrame:(CGRect)frame {
if (self.superview) {
float cellWidth = 500.0;
frame.origin.x = (self.superview.frame.size.width - cellWidth) / 2;
frame.size.width = cellWidth;
}
[super setFrame:frame];
}
Run Code Online (Sandbox Code Playgroud)
只要设备旋转,就会调用该方法,因此单元格将始终居中.
归档时间: |
|
查看次数: |
93382 次 |
最近记录: |