UIScrollView는 예상대로 작동하지만 scrollRectToVisible : 아무것도하지 않습니다.
나는 UIScrollView
전에 사용했고 지금 사용하고 있으며 문제가 없었습니다. 이제 이전 앱에 추가하고 있으며 예상대로 작동하지만 (내용을보고, 손가락으로 스크롤 할 수 있으며, 모든 경계와 크기가 올바르게 설정되어 내용에 빈 공간이 없도록하는 등) .), 나는 일을 할 수 없습니다 scrollToRectVisible
. 호출을 단순화하여 0,0 위치로 이동합니다.
[scrollView scrollRectToVisible:CGRectMake(0, 0, 10, 10) animated:YES];
또는 0,200으로 이동 :
[scrollView scrollRectToVisible:CGRectMake(0, 200, 10, 10) animated:YES];
나는 이것을 테스트하기 위해 빠른 앱을 만들었고 scrollRectToVisible
예상대로 거기에서 일할 수 있습니다 . 하지만 이전 앱에서는 아무것도 할 수없는 것 같습니다.
으로 scrollView 스크롤을 만들 수 setContentOffset:
있지만 원하는 것은 아닙니다.
이 scrollView와 그 내용은 IB에 의해 nib에 정의되고 IBOutlet과 함께 사용됩니다. 내 앱에서 scrollView를 처리하기 위해 사용하는 유일한 코드는
[scrollView setContentSize:CGSizeMake(scrollView.contentSize.width, imageView.frame.size.height)];
(나는 수평이 아닌 수직 스크롤에만 관심이 있습니다).
누구든지 이와 같은 문제가 발생합니까?
두 앱의 scrollView 속성을 비교했으며 동일합니다.
추가:
내 scrollViews 프레임 : 0.000000 0.000000 480.000000 179.000000
내 scrollViews contentSize : 0.000000 324.000000
스크롤하려는 rect가 이미 표시되고 스크롤이 필요하지 않은 것처럼 여전히 작동합니다. 그게 무슨 일인지 확실하지 않습니다. 이것은 가장 끔찍한 일입니다. 해결하기 쉬운 것 같네요 ...
부록 # 2 :
이것이 내가 만드는 방법입니다 scrollRectToVisible
.
CGPoint point = myRect.origin;
if (![clefScrollView pointInside:point withEvent:nil]) {
point.x = 0;
if (point.y > clefScrollView.contentSize.height - clefScrollView.bounds.size.height)
point.y = clefScrollView.contentSize.height - clefScrollView.bounds.size.height;
[clefScrollView setContentOffset:point animated: YES];
}
이 scrollView에 대한 다른 모든 것은 예상대로 작동하지만 scrollRectToVisible
. 왜?!? 거친 추측이 있습니까?
한 달이 지난 후 마침내 알아 냈습니다. 위의 대안이 잘 작동하는 동안 저를 괴롭 히고 마침내 그것을 찾아야했습니다. 그것은 다소 어리석은 실수였습니다.
다음은 scrollView를 설정 한 viewDidLoad의 이전 코드입니다.
[clefScrollView setContentSize:CGSizeMake(clefScrollView.contentSize.width, clefView.frame.size.height)];
scrollView 높이 또는 너비의 값은 0이 될 수 없습니다! ScrollView 크기가 유효한 크기로 시작한다고 가정하고 한 차원이 0이라는 사실을 놓치고 있었기 때문에 이것이 나를 지나친 것 같습니다!
이것은 작동합니다 :
[clefScrollView setContentSize:CGSizeMake(clefView.frame.size.width, clefView.frame.size.height)];
이것이 누군가를 돕기를 바랍니다. 나는 이것을 디버깅하는 데 너무 많은 시간을 보냈다.
그래, 나는 성공하지 scrollRectToVisible:animated:
못했지만 setContentOffset:animated:
항상 나를 위해 일한다. 호기심에서 왜 사용하고 싶지 setContentOffset:animated:
않습니까? 적절한 해결책 인 것 같습니다.
scrollView의 delaysContentTouches
속성이로 설정되어 있는지 확인하고 볼 수 있습니다 NO
.
메서드를 호출 scrollRectToVisible
하거나 setContentOffset
scrollView의 하위 뷰 내에서 터치하면 scrollView가 터치를 지연시켜 상황을 유지할 수 있습니다.
따라서 scrollView에서 다음을 설정했는지 확인하십시오.
scrollView.delaysContentTouches = NO;
애니메이션을 YES로 설정하거나 설정하지 않고 scrollView를 이동할 수 있습니다.
나는 이것을 가지고 있었고 작동하지 않았습니다.
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width, someKnownValue);
나는 단지.의 높이를 변경하고 contentSize
있었기 때문에 그것이 나에게 아무런 문제가되지 않을 것이라고 생각했지만 ...
이것을 이것으로 바꿔야했다
scrollView.contentSize = CGSizeMake(someOtherKnownValue, someKnownValue);
밝혀 scrollView.contentSize.width
반드시 그렇게 더 가져 오기 이동의 유효한 값으로 설정 그것에게 특정 값을 제공하지 않습니다
위의 제안 된 솔루션은 "clefScrollView"에 대한 프레임을 설정하지 않은 경우 여전히 오류가 발생할 수 있습니다.
위의 솔루션을 사용했지만 여전히 동일한 문제가있는 경우 콘텐츠보기를 설정하기 전에 scollView (이 경우 clefScrollView) 프레임을 초기화했는지 확인하십시오.
clefScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,320,450)];
[clefScrollView setContentSize:CGSizeMake(clefView.frame.size.width, clefView.frame.size.height)];
게임에 조금 늦었지만 같은 문제가 발생했습니다. 내 scrollview의 콘텐츠 크기가 올바르게 설정되었지만 높이 값에 대해 과도하게 설정되었습니다. 프레임과 콘텐츠 크기를 확인하기위한 광범위한 검사 후에도 여전히 작동하지 않았습니다. "경계"프레임 높이를 조정해야했고 모든 것이 훌륭하게 작동했습니다.
I had the same symptoms as this issue..the scrollRectToVisible was not working as intended. My problem was that the scrollview on the storyboard had a ambiguous constraint problem. Once that was fixed the call worked just fine. It is something else to check when the scrollRectToVisible call isn't working as intended.
For me the problem was that a constraint in a subview was not explicit. Check that every constraint in your content is set, even if you are not needing it apparently for the layout.
'Development Tip' 카테고리의 다른 글
Homebrew postgres 깨진 (0) | 2020.11.29 |
---|---|
'XXX.Global'유형을로드 할 수 없습니다. (0) | 2020.11.29 |
Excel interop 개체를 통해 열 크기를 자동으로 조정하려면 어떻게합니까? (0) | 2020.11.29 |
UITextView에 줄 바꿈 추가 (0) | 2020.11.29 |
Hibernate 객체를 직렬화 할 때 발생하는 이상한 Jackson 예외 (0) | 2020.11.29 |