2014-11-17 5 views
0

키보드가 표시 될 때 트리거하는 keyboardWillShow 메서드에서 아래 코드를 사용하고 있습니다. 디버그를 사용하여 코드가 실행되고 있지만 버튼 프레임에는 변경 사항이 없습니다. 인쇄가 처음 실행될 때 origin.y는 471입니다. 완료시 실행되면 471이됩니다.애니메이션 도중 단추 프레임 이동

이 버튼을 활성화하여 키보드로 이동하고 위로 이동하려고합니다. 텍스트보기를 위해 완료 버튼으로 사용됩니다.

kbHeight는 253

animateDuration 0.25이다.

Numbers.ANIMATE_DELAY은 다음과 같이 0.0

//Animated done button with keyboard 
    origDoneFrame = btnDone.frame 
    btnDone.hidden = false 
    println(self.btnDone.frame.origin.y) 
    var uConverted:UInt = UInt(animateCurve) 
    var options = UIViewAnimationOptions(uConverted << 16) 
    UIView.animateWithDuration(
     animateDuration, 
     delay: Numbers.ANIMATE_DELAY, 
     options: options, 
     animations: { 
      println(self.btnDone.frame.origin.y) 
      println(kbHeight) 
      println(self.btnDone.frame.origin.y-kbHeight) 
      self.btnDone.frame = CGRectMake(self.btnDone.frame.origin.x, self.btnDone.frame.origin.y - kbHeight, self.btnDone.frame.size.width, self.btnDone.frame.size.height) 
      println(self.btnDone.frame.origin.y) 
      return Void() 
     }, 
     completion: {finished in 
      println(self.btnDone.frame.origin.y) 
      return Void() 
     } 
    ) 

출력 반환 : 나는 그에게 다시 재설정 할 것입니다 볼 수있는 유일한 일이

471.0 
471.0 
253.0 
218.0 
218.0 
471.0 

버튼이 제약을 가지고, 하단,하지만 수동으로 프레임을 변경할 때 제약 조건을 무시하고 싶습니다.

답변

0

방식에 따라 자동 레이아웃 제약 조건을 무시할 수 있습니다. 완전히 제거하는 것만 큼 무시하지는 않습니다. 아래 코드를 사용하면 다음을 수행 할 수 있습니다.

//Set up done button 
     btnDone.removeConstraints(btnDone.constraints()) 
     btnDone.setTranslatesAutoresizingMaskIntoConstraints(true) 
     btnDone.frame = CGRectMake(view.frame.size.width - btnDone.frame.size.width - 8, view.frame.size.height - btnDone.frame.size.height - 8 + self.tabBarController!.tabBar.frame.size.height, btnDone.frame.size.width, btnDone.frame.size.height) 
     btnDone.alpha = 0.0 
     btnDone.hidden = true 

이 시점부터 필요에 따라 버튼을 움직일 수 있습니다. 이로 인해 여러 제약 조건을 만족시키는 것에 대한 경고가 때때로 발생하지만 버튼이 예상대로 작동합니다.

0

하지만 수동으로 프레임을 변경하면 제약 조건을 무시하고 싶습니다.

수 없습니다. Autolayout은 그렇게 작동하지 않습니다. 대신에 제약 조건을 수정해야합니다. 그렇지 않으면 자동 레이아웃 단계에서 뷰의 위치가 변경됩니다.

버튼에 수직 위치를 제공하는 구속 조건에 콘센트를 만들고 constant 속성을 수정하고 view.layoutIfNeeded()을 애니메이션 블록에 호출하십시오.

관련 문제