一个简单的例子用于演示UIScrollView的奇怪功能。
有一个占用整个屏幕区域的UIScrollView实例。 UIView的一个实例放在UIScrollView实例上并完全重叠。
配置ScrollView,以便在重叠的视图中传输他的所有滑动并且滚动没有发生。所以它应该工作,所有滑动重定向到视图,因为它完全重叠ScrollView。 但是有一个区域位于屏幕的左下角,当你滑动时有时(并不总是)开始滚动。 这个神奇的地方是什么?如何避免这种行为? 仅在设备上重复(在iPhone6,iPhone6 +,iPad Air上试过),在模拟器上无法重复。
我们如何创建和自定义视图:
<?xml version="1.0" encoding="utf-8"?>
<merge
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="4dp"
app:cardElevation="4dp"
app:cardUseCompatPadding="true"
app:cardPreventCornerOverlap="false">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingStart="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingEnd="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:layout_marginTop="@dimen/activity_vertical_margin">
...
</RelativeLayout>
</android.support.v7.widget.CardView>
</merge>
MyScrollView有一个重写方法:
- (void)viewDidLoad
{
[super viewDidLoad];
MyScrollView *sv = [[MyScrollView alloc] initWithFrame:self.view.bounds];
sv.canCancelContentTouches = NO;
sv.delaysContentTouches = NO;
sv.multipleTouchEnabled = NO;
sv.contentSize = CGSizeMake(sv.bounds.size.width, sv.bounds.size.height + 300);
sv.backgroundColor = [UIColor redColor];
[self.view addSubview:sv];
UIView *topView = [[UIView alloc] initWithFrame:sv.bounds];
topView.backgroundColor = [UIColor greenColor];
[sv addSubview:topView];
}
谢谢,抱歉我的英语。