小编Mof*_*Mof的帖子

自定义UITableViewCell具有自动布局和附件视图

我有一个自定义表格视图单元格,它使用自动布局,并有一个披露指标作为附件视图.首次显示时,屏幕上单元格的单元格大小完全错误:

正如您所看到的那样,该单元占用了大约1.5个屏幕的空间:

在此输入图像描述

但是,如果我旋转设备并向后旋转它看起来很好:

在此输入图像描述

正如你在这里看到的,我没有做过任何复杂的事情:

在此输入图像描述

我有一个非常非理想的解决方法:

-(void)viewDidAppear:(BOOL)animated 
{
    [super viewDidAppear:animated];
    [self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)

但是当你第一次看到屏幕时,这显然会导致"闪光".在更复杂的情况下,闪光灯更加明显.

我有另一个解决方法,但这会导致自动布局异常:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    BasicCell *cell = [tableView dequeueReusableCellWithIdentifier:@"BasicCell" forIndexPath:indexPath];
    cell.basicLabel.text = @"Hello this is just some text that should get the label to go over multiple lines";
    [cell.basicLabel layoutIfNeeded];
    return cell;
}
Run Code Online (Sandbox Code Playgroud)

例外:

在此输入图像描述

至少这种方法不会给我UI闪烁.

如果我删除附件视图,它实际上完全正常.

更新:我已经向github添加了一个示例项目:https: //github.com/fwaddle/TableCellAccessoryTest

更新#2:关于这个错误的另一项工作是在代码中布局单元格.我只是尝试在代码中做同样的事情,它没有抛出警告并且工作正常.看起来像一个IB bug.

有任何想法如何解决这个问题?谢谢.

objective-c uitableview ios ios-autolayout uitableviewautomaticdimension

6
推荐指数
1
解决办法
3606
查看次数

UIScrollView 键盘在拖动时关闭不会在 iOS 11 上使用自定义 inputView 键盘在 UIView 上调用 resignFirstResponder

我有UIView一个签名。签名是通过签名视图上的自定义 inputView 输入的。在绘制签名视图时,我利用它是第一响应者这一事实来突出显示正在编辑的视图,并且我还覆盖了该resignFirstResponder方法以计算何时停止将其显示为正在编辑。

所以代码看起来像这样:

@implementation SignatureView 

-(BOOL) becomeFirstResponder {
    BOOL result = [super becomeFirstResponder];
    [self showEditingMode];
    return result;
}

-(BOOL) resignFirstResponder {
    BOOL result = [super resignFirstResponder];
    [self showViewingMode];
    return result;
}

-(UIView *) inputView {
    if (!keyboard)
      keyboard = [[SignatureKeyboardView alloc] initWithStuff:stuff....];
    return keyboard;
}

@end
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,在 iOS 11 上,resignFirstResponder不再调用该方法。在以前版本的 iOS 上,它曾经被调用,然后我可以更改 UI 以显示它不再被编辑。

这仅在UIScrollView设置为拖动时关闭键盘时发生,并且用户拖动UIScrollView. 如果用户改为点击UIView可以成为第一响应者的另一个,例如 a UITextFieldresignFirstResponder则被调用。

我是否遗漏了 iOS11 中更改的某些内容或遇到了错误?

keyboard uiscrollview ios inputview

5
推荐指数
0
解决办法
103
查看次数