iOS:如何在其accessoryView更改时触发tableViewCell的约束/自动布局刷新?

时间:2015-04-30 13:32:03

标签: ios uitableview autolayout uilabel constraints

我有一个使用基于约束的自动布局构建的自定义tableview +自定义单元格(所有编程方式,没有IB)。在每个单元格中,(包括其他)具有文本的(可能的)多行标签。自动布局的第一次计算很好 - 即UILabel根据其文本长度正确包装。

但是一旦我选择了一个单元格(即从UITableViewCellAccessoryNone更改为UITableViewCellAccessoryCheckmark),我就会遇到布局问题,并且UILabel.text所需的行数应该改变 - 但是保持不变。

我试过......

[myTableView reloadData];

[myTableView beginUpdate];
[myTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
[myTableView endUpdates];

...在单元格选择的委托中,但没有成功更新单元格的布局。

我想我需要告诉系统重新评估tableviewcell的约束(特别是重新评估UILabel的preferredMaxLayoutWidth。)但是我不知道如何以正确的方式做到这一点。 (我尝试了一些setNeedsUpdate,而不是试错法。)

提前感谢我指出了正确的方向!

1 个答案:

答案 0 :(得分:1)

您必须通过以下方式专门为UILabel重新评估preferredMaxLayoutWidth: -

usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
              [-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
              [--ignore-crashes] [--ignore-timeouts]
              [--ignore-security-exceptions]
              [--monitor-native-crashes] [--ignore-native-crashes]
              [--kill-process-after-error] [--hprof]
              [--pct-touch PERCENT] [--pct-motion PERCENT]
              [--pct-trackball PERCENT] [--pct-syskeys PERCENT]
              [--pct-nav PERCENT] [--pct-majornav PERCENT]
              [--pct-appswitch PERCENT] [--pct-flip PERCENT]
              [--pct-anyevent PERCENT] [--pct-pinchzoom PERCENT]
              [--pkg-blacklist-file PACKAGE_BLACKLIST_FILE]
              [--pkg-whitelist-file PACKAGE_WHITELIST_FILE]
              [--wait-dbg] [--dbg-no-events]
              [--setup scriptfile] [-f scriptfile [-f scriptfile] ...]
              [--port port]
              [-s SEED] [-v [-v] ...]
              [--throttle MILLISEC] [--randomize-throttle]
              [--profile-wait MILLISEC]
              [--device-sleep-time MILLISEC]
              [--randomize-script]
              [--script-log]
              [--bugreport]
              [--periodic-bugreport]
              COUNT