gpt4 book ai didi

iphone - iOS + 自动布局 : UITableViewCell label + textfield width with rotation

转载 作者:可可西里 更新时间:2023-11-01 05:55:33 29 4
gpt4 key购买 nike

我不知道 iOS (6.x) 上的 AutoLayout 问题的答案。

我有一个带有 UILabel 和 UITextField 的 UITableViewCell,如下所示:

+------------------+
| label textField |
+------------------+

我想使用 AutoLayout 来布局这些,但有一个警告。 UILabel 在纵向模式下应为 100 点,在横向模式下应为 175 点。

即在视觉格式语言中,这将类似于以下内容

Portrait:
|-[label(100)]-[textField]-|

Landscape:
|-[label(175)]-[textField]-|

因此文本字段将占据单元格 View 的其余部分。

当然我可以通过覆盖 willRotateToInterfaceOrientation:duration: 来解决这个问题找出当前显示的单元格,然后调用 updateConstraints在它们上面,所以我可以根据方向更新标签的宽度,但这似乎不是可行的方法。首先,然后连接到旋转动画似乎很难或不可能。其次,我的感觉告诉我,我可以用优先级和不平等来解决它。我会添加类似 [label(>=100,<=175)] 的内容对于标签,但随后我需要做其他事情,否则标签将始终调整为特定大小(100 或 175)。

我以为我已经修复了它:我已经将标签的内容拥抱优先级设置为 200,在文本字段上设置宽度至少应为 152 的约束,然后它会执行我想要的操作,除非我举个例子启用 TableView 的编辑模式,因为这样文本字段就不能再宽 152 点(没有足够的空间)。输入这个任意的“152”也感觉不是要走的路。

那么有人对我如何解决这个问题有什么建议吗?

最佳答案

在上述评论的帮助下,我将以下内容添加到我的自定义 UITableViewCell 类中:

- (void)setupLabelWidthConstraint {
if (self.labelWidthConstraint) {
[self.contentView removeConstraint:self.labelWidthConstraint];
}
if (UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation])) {
self.labelWidthConstraint =
[[NSLayoutConstraint constraintsWithVisualFormat:@"[label(==width)]"
options:0
metrics:@{@"width": [NSNumber numberWithFloat:LABEL_LANDSCAPE_WIDTH]}
views:@{@"label": self.label}] lastObject];
} else {
self.labelWidthConstraint =
[[NSLayoutConstraint constraintsWithVisualFormat:@"[label(==width)]"
options:0
metrics:@{@"width": [NSNumber numberWithFloat:LABEL_PORTRAIT_WIDTH]}
views:@{@"label": self.label}] lastObject];
}
[self.contentView addConstraint:self.labelWidthConstraint];
}

并在 initWithCoder: 中运行它。此外,我已将以下内容添加到我的 UITableViewController 中:

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
NSArray *visibleCells = [self.tableView visibleCells];
for (UITableViewCell *visibleCell in visibleCells) {
if ([visibleCell isKindOfClass:[FMSingleInputCell class]]) {
FMSingleInputCell *singleInputCell = (FMSingleInputCell *)visibleCell;
[singleInputCell setupLabelWidthConstraint];
}
}
}

这就是诀窍! (LABEL_LANDSCAPE_WIDTHLABEL_PORTRAIT_WIDTH 定义为 100.f175.f)

关于iphone - iOS + 自动布局 : UITableViewCell label + textfield width with rotation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17629392/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com