正しい解決策は@LuisCienからのものです
MPMediaPickerController で UIScrollView を使用するときに役立つことがわかったことをここに追加します。
- (void)fixViewFrameBoundSize {
CGRect contentsFrame = self.view.frame;
CGSize boundsSize = self.view.bounds.size;
if (contentsFrame.size.height < boundsSize.height) {
contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0f;
} else {
contentsFrame.origin.y = 0.0f;
}
[self.view setFrame:contentsFrame];
}
と
- (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker {
[self dismissViewControllerAnimated:YES completion:^{
dispatch_async(dispatch_get_main_queue(), ^{
[self fixViewFrameBoundSize];
});
}];
}
選択した項目のコールバックについても同じです:
[self dismissViewControllerAnimated:YES
completion:^{
//LP : get item url and play
dispatch_async(dispatch_get_main_queue(), ^{
[self fixViewFrameBoundSize];
});
MPMediaItem *item = [collection representativeItem];
このソリューションは、UIView を持つ XIB があり、それを次のように UISCrollView に変換する場合にうまく機能します。
- (void)scrollViewMakeScrollable {
CGSize scrollableSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height+44.0);
[((UIScrollView*)self.view) setContentSize:scrollableSize];
[((UIScrollView*)self.view) setAlwaysBounceHorizontal:NO];
[((UIScrollView*)self.view) setAlwaysBounceVertical:NO];
self.automaticallyAdjustsScrollViewInsets = NO;
}
通常、あなたがやっているとき
- (void) viewDidLoad {
[super viewDidLoad];
[self scrollViewMakeScrollable];