现在我需要添加一个错误通知,该通知将从顶部生成,现有视图将向下移动,如下图所示。
我知道只需在现有视图控制器中添加此错误视图并管理其高度限制,我就可以轻松完成此操作。但我还有其他几个视图需要重新使用此错误视图。所以,现在我已经为这个错误视图创建了一个自定义视图。现在我的主要问题是使用autolayout以编程方式将其添加到我的主视图中。所以我需要在我的self.view中添加蓝色错误视图并删除绿色视图的顶部布局约束,并将其顶部设置为蓝色错误视图。合理?下面是我的错误视图代码并将其添加到self.view。但即使这样也行不通,我在这里做错了什么。任何帮助表示赞赏。
List<String> list = Arrays.asList("def123", "abc999", "zzz000", "abc123", "zzz111");
Comparator<String> cmp = new Comparator<String>() {
public int compare(String o1, String o2) {
int diff = (o1.substring(0,3)).compareTo(o2.substring(0,3));
return (diff == 0) ? (Integer.valueOf(o2.substring(3)).compareTo(Integer.valueOf(o1.substring(3)))): diff;
}
};
Collections.sort(list, cmp);
我从我的viewcontroller
中调用了这样的errorView-(id)initWithdelegate:(id)parentSelf ForView:(UIView *)parentView
{
if (self = [super initWithFrame:CGRectMake(0, 0, 100, 100)])
{
// Initialization code
self=(ErrorView*)[[[NSBundle mainBundle] loadNibNamed:@"ErrorView" owner:nil options:nil]objectAtIndex:0];
self.delegate=parentSelf;
[parentView addSubview:self];
self.hidden = YES;
[self setConstraintsToParentView:parentView];
}
return self;
}
-(void)setConstraintsToParentView:(UIView *)parentView
{
[parentView setTranslatesAutoresizingMaskIntoConstraints:NO];
//Setting width equal to parentview
[parentView addConstraint:[NSLayoutConstraint constraintWithItem:self
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:parentView
attribute:NSLayoutAttributeWidth
multiplier:1
constant:0]];
//Setting fixed height of 50
[parentView addConstraint:[NSLayoutConstraint constraintWithItem:self
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationGreaterThanOrEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:50]];
//Setting x pos to center
[parentView addConstraint:[NSLayoutConstraint constraintWithItem:self
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:parentView
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0.0]];
//Setting top position to self.view with constant 20
[parentView addConstraint:[NSLayoutConstraint constraintWithItem:self
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:parentView
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:20]];
}
答案 0 :(得分:1)
您可以使用约束的标识符属性
NSArray *ArrayConstraint = yorlableorView.constraints;
for (NSLayoutConstraint *ob in ArrayConstraint)
{
if ([ob.identifier isEqualToString:@"yourIdentifier"])
{
ob.constant = 0 ;
// set your constant you want
}
}
答案 1 :(得分:1)
您是否可以将错误视图添加为高度为0的顶视图,然后在要显示时更改高度约束常量?你可以对它进行动画处理,它会模拟它向下推动一切,但是通过这种方法,它看起来不会从屏幕顶部下来。
如果您对此方法感到满意,可以使用按钮和tableview为视图添加容器视图,然后在从xib初始化错误视图后将其分配给容器,这样可以节省您的时间必须传递父视图,将其添加为子视图并在错误视图类中以编程方式添加约束。
如果需要更多详细信息或具体示例,请告诉我。希望这有帮助,祝你好运。另外,您可以查看Masonry,它可以更容易地以编程方式添加约束。