В моем представлении у контроллера есть два объекта. TopView и CustomScrollView. Я хотел бы позиционировать Topview сверху и CustomScrollView под ними, так что я положил это:Перемещение UIView в среде автоматического макета
// TOP VIEW LAYOUT
// horizontal
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:| [_topView]|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(_topView, self)]];
// vertical
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_topView(89)]" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(_topView, self)]];
// CUSTOMSCROLLVIEW
// horizontal
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_customScrollVeiw]|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(_customScrollVeiw, self)]];
// vertical
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_topView]-(0)-[_customScrollVeiw]|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(_customScrollVeiw, _topView, self)]];
и работает отлично.
Но сейчас я хотел бы перейти Вид сверху, как я прокручиваю в CustomScrollView так я создаю эту функцию:
- (void) moveOnScroll: (CGPoint) offset contentSize: (CGSize) contentSize
{
float delta = offset.y - self.yPosition;
if (self.yPosition > offset.y) {
if (labs(self.frame.origin.y) < self.frame.size.height/50){
self.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
}
else if (self.frame.origin.y - delta < 0 && offset.y < (contentSize.height - self.screenHeight)){
self.frame = CGRectMake(0, self.frame.origin.y - delta, self.frame.size.width, self.frame.size.height);
}
else{
self.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
}
}
else {
if (self.frame.origin.y > (- self.frame.size.height + self.labelHeight) && offset.y > 0){
if (self.frame.origin.y - delta < (- self.frame.size.height + self.labelHeight)) {
self.frame = CGRectMake(0, (- self.frame.size.height + self.labelHeight), self.frame.size.width, self.frame.size.height);
}
else{
self.frame = CGRectMake(0, self.frame.origin.y - delta , self.frame.size.width, self.frame.size.height);
}
}
}
self.yPosition = offset.y;
}
Теперь TopView скрывается, как я прокручивать, но CustomScrollView не обниматься к TopView больше, его остается на своем месте и не двигается. (V: [_ topView] - (0) - [_ customScrollVeiw] |)
как исправить это?
Используйте это: https://github.com/iMartinKiss/KeepLayout это сделает вашу жизнь проще о AutoLayout – AncAinu
А насчет вашего вопроса, один раз вы используете AutoLayout, вы не должны касаться фреймов напрямую, если вы не хотите все испортить – AncAinu
Да, я думал, что это может быть проблемой. Но как изменить свойство Y без изменения рамки с автоматической компоновкой. –