iOS – 查找视图的顶级约束?

前端之家收集整理的这篇文章主要介绍了iOS – 查找视图的顶级约束?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在代码中找到视图的顶级约束.
在故事板中添加了顶级约束,我不想使用IBOutlet.

在以下代码中记录firstAttribute的值似乎总是返回NSLayoutAttributeHeight类型的约束.任何想法如何可靠地找到代码中的视图的顶级约束?

  1. NSLayoutConstraint *topConstraint;
  2.  
  3. for (NSLayoutConstraint *constraint in self.constraints) {
  4. if (constraint.firstAttribute == NSLayoutAttributeTop) {
  5. topConstraint = constraint;
  6. break;
  7. }
  8. }

解决方法

而不是迭代self.constraints,你应该遍历self.superview.constraints.

自我约束只包含与视图相关的限制(例如,高度和宽度约束).

这是一个代码示例:

  1. - (void)awakeFromNib
  2. {
  3. [super awakeFromNib];
  4.  
  5. if (!self.topConstraint) {
  6. [self findTopConstraint];
  7. }
  8. }
  9.  
  10. - (void)findTopConstraint
  11. {
  12. for (NSLayoutConstraint *constraint in self.superview.constraints) {
  13. if ([self isTopConstraint:constraint]) {
  14. self.topConstraint = constraint;
  15. break;
  16. }
  17. }
  18. }
  19.  
  20. - (BOOL)isTopConstraint:(NSLayoutConstraint *)constraint
  21. {
  22. return [self firstItemMatchesTopConstraint:constraint] ||
  23. [self secondItemMatchesTopConstraint:constraint];
  24. }
  25.  
  26. - (BOOL)firstItemMatchesTopConstraint:(NSLayoutConstraint *)constraint
  27. {
  28. return constraint.firstItem == self && constraint.firstAttribute == NSLayoutAttributeTop;
  29. }
  30.  
  31. - (BOOL)secondItemMatchesTopConstraint:(NSLayoutConstraint *)constraint
  32. {
  33. return constraint.secondItem == self && constraint.secondAttribute == NSLayoutAttributeTop;
  34. }

猜你在找的iOS相关文章