我有一个自定义单元格(UITableViewCell
的子类),并且其中有一些UITextField
我想选择其在单元格中的相对位置。
所以我的代码类似于:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
NSInteger offset = 230;
UITextField *myTextField = [[UITextField alloc] initWithFrame:CGRectMake(offset, 10, 95, 30)];
[self.contentView addSubview:myTextField];
}
return self;
}
现在我的问题是,这在纵向模式下可以正常工作,但在横向模式下,我想调整偏移量以模拟文本框的右对齐。同样,我希望能够调整
iPad
。如何获取当前的单元格宽度?
我尝试使用
self.contentView.frame.size.width
和self.contentView.bounds.size.width
,但两者始终返回320。我知道这听起来像是一个已经被问过数千次的问题,但是我什么也没发现……
注意:我知道重复使用单元格会遇到一些问题,但是我还没有到此为止。
最佳答案
UITableViewCell
的默认大小取决于xib(storyboard),如果它是从xib或情节提要中初始化的。
如果您的单元格是从这样的代码初始化的:
[tableView dequeueReusableCellWithIdentifier:CELL_IDENTIFIER forIndexPath:indexPath]
因此,您的单元将首先被初始化(无论是iphone还是ipad,其大小始终为
(320.0, 44.0)
),然后进行大小调整。因此,当
width
的大小更改时,您必须调整myTextField
的Cell
。有3个解决方案:
使用自动版式:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
UITextField *myTextField = [[UITextField alloc] init];
[self.contentView addSubview:myTextField];
myTextField.translatesAutoresizingMaskIntoConstraints = NO;
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[textField(==30)]"
options:NSLayoutFormatDirectionLeadingToTrailing
metrics:nil
views:@{@"textField" : myTextField}]];
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[textField(==95)]-0-|"
options:NSLayoutFormatDirectionLeadingToTrailing
metrics:nil
views:@{@"textField" : myTextField}]];
}
return self;
}
使用autoresizingMask就像@jpulikkottil所说的那样:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
NSInteger offset = 230;
UITextField *myTextField = [[UITextField alloc] initWithFrame:CGRectMake(offset, 10, 95, 30)];
[self.contentView addSubview:myTextField];
mytextfield.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
}
return self;
}
使用layoutSubviews
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
UITextField *myTextField = [[UITextField alloc] init];
self.myTextField = myTextField;
[self.contentView addSubview:myTextField];
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
NSInteger offset = self.contentView.bounds.size.width - 95;
self.myTextField.frame = CGRectMake(offset, 10, 95, 30);
}
关于ios - 获取UITableViewCell的当前宽度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31018112/