Chat Screen: Prepare scrolling on preview

This commit is contained in:
giomfo 2016-04-20 18:50:03 +02:00
parent cbc3ec6aa0
commit 1055c6cffe
3 changed files with 87 additions and 19 deletions

View file

@ -29,6 +29,7 @@
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *expandedHeaderContainerHeightConstraint; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *expandedHeaderContainerHeightConstraint;
// The preview header // The preview header
@property (weak, nonatomic) IBOutlet UIScrollView *previewScrollView;
@property (weak, nonatomic) IBOutlet UIView *previewHeaderContainer; @property (weak, nonatomic) IBOutlet UIView *previewHeaderContainer;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *previewHeaderContainerHeightConstraint; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *previewHeaderContainerHeightConstraint;

View file

@ -223,9 +223,11 @@
// Note: this operation will force the layout of subviews. That is why cell view classes must be registered before. // Note: this operation will force the layout of subviews. That is why cell view classes must be registered before.
[self setRoomInputToolbarViewClass:RoomInputToolbarView.class]; [self setRoomInputToolbarViewClass:RoomInputToolbarView.class];
// Disable animation during the update of the inputToolBar height. // Update the inputToolBar height.
CGFloat height = (self.inputToolbarView ? ((RoomInputToolbarView*)self.inputToolbarView).mainToolbarMinHeightConstraint.constant : 0);
// Disable animation during the update
[UIView setAnimationsEnabled:NO]; [UIView setAnimationsEnabled:NO];
[self roomInputToolbarView:self.inputToolbarView heightDidChanged:((RoomInputToolbarView*)self.inputToolbarView).mainToolbarMinHeightConstraint.constant completion:nil]; [self roomInputToolbarView:self.inputToolbarView heightDidChanged:height completion:nil];
[UIView setAnimationsEnabled:YES]; [UIView setAnimationsEnabled:YES];
// set extra area // set extra area
@ -364,7 +366,7 @@
[self showExpandedHeader:NO]; [self showExpandedHeader:NO];
// Hide preview header (if any) during device rotation // Hide preview header (if any) during device rotation
BOOL isPreview = !self.previewHeaderContainer.isHidden; BOOL isPreview = !self.previewScrollView.isHidden;
if (isPreview) if (isPreview)
{ {
[self showPreviewHeader:NO]; [self showPreviewHeader:NO];
@ -432,9 +434,15 @@
{ {
self.navigationItem.rightBarButtonItem.enabled = NO; self.navigationItem.rightBarButtonItem.enabled = NO;
// Hide input tool bar and activity view. FIXME: These items should be removed instead of being hidden until they will be used for preview. // Remove input tool bar and activity view if any
self.inputToolbarView.hidden = YES; if (self.inputToolbarView)
self.activitiesView.hidden = YES; {
[super setRoomInputToolbarViewClass:nil];
}
if (self.activitiesView)
{
[super setRoomActivitiesViewClass:nil];
}
if (previewHeader) if (previewHeader)
{ {
@ -451,9 +459,52 @@
self.titleView.editable = NO; self.titleView.editable = NO;
expandedHeader.mxRoom = self.roomDataSource.room; expandedHeader.mxRoom = self.roomDataSource.room;
// Restore tool bar view and room activities view if none
if (!self.inputToolbarView)
{
[self setRoomInputToolbarViewClass:RoomInputToolbarView.class];
// Update the inputToolBar height.
CGFloat height = (self.inputToolbarView ? ((RoomInputToolbarView*)self.inputToolbarView).mainToolbarMinHeightConstraint.constant : 0);
// Disable animation during the update
[UIView setAnimationsEnabled:NO];
[self roomInputToolbarView:self.inputToolbarView heightDidChanged:height completion:nil];
[UIView setAnimationsEnabled:YES];
[self refreshRoomInputToolbar];
}
if (!self.activitiesView)
{
// And the extra area
[self setRoomActivitiesViewClass:RoomActivitiesView.class];
}
} }
} }
- (void)setRoomInputToolbarViewClass:(Class)roomInputToolbarViewClass
{
// Do not show toolbar in case of preview
if (self.isRoomPreview)
{
roomInputToolbarViewClass = nil;
}
[super setRoomInputToolbarViewClass:roomInputToolbarViewClass];
}
- (void)setRoomActivitiesViewClass:(Class)roomActivitiesViewClass
{
// Do not show room activities in case of preview
if (self.isRoomPreview)
{
roomActivitiesViewClass = nil;
}
[super setRoomActivitiesViewClass:roomActivitiesViewClass];
}
- (BOOL)isIRCStyleCommand:(NSString*)string - (BOOL)isIRCStyleCommand:(NSString*)string
{ {
// Override the default behavior for `/join` command in order to open automatically the joined room // Override the default behavior for `/join` command in order to open automatically the joined room
@ -715,7 +766,7 @@
{ {
// This operation is ignored if a screen rotation is in progress, // This operation is ignored if a screen rotation is in progress,
// or if the view controller is not embedded inside a split view controller yet. // or if the view controller is not embedded inside a split view controller yet.
if (self.previewHeaderContainer.isHidden == isVisible && isSizeTransitionInProgress == NO && self.splitViewController) if (self.previewScrollView.isHidden == isVisible && isSizeTransitionInProgress == NO && self.splitViewController)
{ {
if (isVisible) if (isVisible)
{ {
@ -784,7 +835,7 @@
previewHeader = nil; previewHeader = nil;
} }
self.previewHeaderContainer.hidden = !isVisible; self.previewScrollView.hidden = !isVisible;
// Consider the main navigation controller if the current view controller is embedded inside a split view controller. // Consider the main navigation controller if the current view controller is embedded inside a split view controller.
UINavigationController *mainNavigationController = self.navigationController; UINavigationController *mainNavigationController = self.navigationController;
@ -833,7 +884,6 @@
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseIn [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseIn
animations:^{ animations:^{
self.bubblesTableViewTopConstraint.constant = (isVisible ? self.previewHeaderContainerHeightConstraint.constant - self.bubblesTableView.contentInset.top : 0);
if (roomAvatarView) if (roomAvatarView)
{ {
@ -1568,9 +1618,12 @@
// Enable back the text input // Enable back the text input
[self setRoomInputToolbarViewClass:RoomInputToolbarView.class]; [self setRoomInputToolbarViewClass:RoomInputToolbarView.class];
// Update the inputToolBar height.
CGFloat height = (self.inputToolbarView ? ((RoomInputToolbarView*)self.inputToolbarView).mainToolbarMinHeightConstraint.constant : 0);
// Disable animation during the update
[UIView setAnimationsEnabled:NO]; [UIView setAnimationsEnabled:NO];
[self roomInputToolbarView:self.inputToolbarView heightDidChanged:((RoomInputToolbarView*)self.inputToolbarView).mainToolbarMinHeightConstraint.constant completion:nil]; [self roomInputToolbarView:self.inputToolbarView heightDidChanged:height completion:nil];
[UIView setAnimationsEnabled:YES]; [UIView setAnimationsEnabled:YES];
// And the extra area // And the extra area

View file

@ -14,6 +14,7 @@
<outlet property="expandedHeaderContainerHeightConstraint" destination="w9z-HS-7wJ" id="6uK-Bn-TcU"/> <outlet property="expandedHeaderContainerHeightConstraint" destination="w9z-HS-7wJ" id="6uK-Bn-TcU"/>
<outlet property="previewHeaderContainer" destination="54r-18-K1g" id="Klt-RV-V1E"/> <outlet property="previewHeaderContainer" destination="54r-18-K1g" id="Klt-RV-V1E"/>
<outlet property="previewHeaderContainerHeightConstraint" destination="goj-GZ-IkD" id="GbA-T9-kiL"/> <outlet property="previewHeaderContainerHeightConstraint" destination="goj-GZ-IkD" id="GbA-T9-kiL"/>
<outlet property="previewScrollView" destination="RJ4-Os-6tg" id="bK3-KK-FPe"/>
<outlet property="roomActivitiesContainer" destination="XX4-n6-hCm" id="uD0-ab-8s8"/> <outlet property="roomActivitiesContainer" destination="XX4-n6-hCm" id="uD0-ab-8s8"/>
<outlet property="roomActivitiesContainerHeightConstraint" destination="E8v-l2-8eV" id="ebD-oV-ttx"/> <outlet property="roomActivitiesContainerHeightConstraint" destination="E8v-l2-8eV" id="ebD-oV-ttx"/>
<outlet property="roomInputToolbarContainer" destination="nLd-BP-JAE" id="1dp-P1-0js"/> <outlet property="roomInputToolbarContainer" destination="nLd-BP-JAE" id="1dp-P1-0js"/>
@ -38,13 +39,25 @@
<constraint firstAttribute="height" constant="240" id="w9z-HS-7wJ"/> <constraint firstAttribute="height" constant="240" id="w9z-HS-7wJ"/>
</constraints> </constraints>
</view> </view>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="54r-18-K1g"> <scrollView hidden="YES" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="RJ4-Os-6tg">
<rect key="frame" x="0.0" y="0.0" width="600" height="368"/> <rect key="frame" x="0.0" y="0.0" width="600" height="559"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="54r-18-K1g">
<rect key="frame" x="0.0" y="0.0" width="600" height="368"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" constant="368" id="goj-GZ-IkD"/>
</constraints>
</view>
</subviews>
<constraints> <constraints>
<constraint firstAttribute="height" constant="368" id="goj-GZ-IkD"/> <constraint firstItem="54r-18-K1g" firstAttribute="top" secondItem="RJ4-Os-6tg" secondAttribute="top" id="4LN-XX-e47"/>
<constraint firstAttribute="bottom" secondItem="54r-18-K1g" secondAttribute="bottom" id="JlP-zp-nqW"/>
<constraint firstItem="54r-18-K1g" firstAttribute="centerX" secondItem="RJ4-Os-6tg" secondAttribute="centerX" id="Uet-zt-YLH"/>
<constraint firstAttribute="trailing" secondItem="54r-18-K1g" secondAttribute="trailing" id="fMh-hQ-FxE"/>
<constraint firstItem="54r-18-K1g" firstAttribute="leading" secondItem="RJ4-Os-6tg" secondAttribute="leading" id="xan-dj-Vcl"/>
</constraints> </constraints>
</view> </scrollView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XX4-n6-hCm" userLabel="Activities Container"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XX4-n6-hCm" userLabel="Activities Container">
<rect key="frame" x="0.0" y="539" width="600" height="20"/> <rect key="frame" x="0.0" y="539" width="600" height="20"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
@ -64,18 +77,19 @@
<constraints> <constraints>
<constraint firstAttribute="trailing" secondItem="BGD-sd-SQR" secondAttribute="trailing" id="0la-ok-MBr"/> <constraint firstAttribute="trailing" secondItem="BGD-sd-SQR" secondAttribute="trailing" id="0la-ok-MBr"/>
<constraint firstItem="nLd-BP-JAE" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="4Q7-hr-rqi"/> <constraint firstItem="nLd-BP-JAE" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="4Q7-hr-rqi"/>
<constraint firstItem="RJ4-Os-6tg" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="7Pf-Cu-oku"/>
<constraint firstAttribute="trailing" secondItem="uK2-9a-rZj" secondAttribute="trailing" id="HbF-85-ctI"/> <constraint firstAttribute="trailing" secondItem="uK2-9a-rZj" secondAttribute="trailing" id="HbF-85-ctI"/>
<constraint firstAttribute="bottom" secondItem="BGD-sd-SQR" secondAttribute="bottom" constant="41" id="Ksk-39-kfi"/> <constraint firstAttribute="bottom" secondItem="BGD-sd-SQR" secondAttribute="bottom" constant="41" id="Ksk-39-kfi"/>
<constraint firstItem="54r-18-K1g" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="QGq-T0-Epo"/> <constraint firstItem="RJ4-Os-6tg" firstAttribute="bottom" secondItem="BGD-sd-SQR" secondAttribute="bottom" id="PzW-iz-SYV"/>
<constraint firstItem="XX4-n6-hCm" firstAttribute="bottom" secondItem="nLd-BP-JAE" secondAttribute="top" id="QO8-nF-xys"/> <constraint firstItem="XX4-n6-hCm" firstAttribute="bottom" secondItem="nLd-BP-JAE" secondAttribute="top" id="QO8-nF-xys"/>
<constraint firstAttribute="trailing" secondItem="RJ4-Os-6tg" secondAttribute="trailing" id="Tya-RC-NBW"/>
<constraint firstItem="XX4-n6-hCm" firstAttribute="width" secondItem="iN0-l3-epB" secondAttribute="width" id="WhE-lH-ZtR"/> <constraint firstItem="XX4-n6-hCm" firstAttribute="width" secondItem="iN0-l3-epB" secondAttribute="width" id="WhE-lH-ZtR"/>
<constraint firstItem="BGD-sd-SQR" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="X14-4s-uGM"/> <constraint firstItem="BGD-sd-SQR" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="X14-4s-uGM"/>
<constraint firstAttribute="trailing" secondItem="nLd-BP-JAE" secondAttribute="trailing" id="YAu-gd-ItG"/> <constraint firstAttribute="trailing" secondItem="nLd-BP-JAE" secondAttribute="trailing" id="YAu-gd-ItG"/>
<constraint firstAttribute="trailing" secondItem="54r-18-K1g" secondAttribute="trailing" id="b8H-xp-RH3"/>
<constraint firstItem="XX4-n6-hCm" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="csl-KT-4s9"/> <constraint firstItem="XX4-n6-hCm" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="csl-KT-4s9"/>
<constraint firstItem="BGD-sd-SQR" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="haP-Kv-OLI"/> <constraint firstItem="BGD-sd-SQR" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="haP-Kv-OLI"/>
<constraint firstAttribute="bottom" secondItem="nLd-BP-JAE" secondAttribute="bottom" id="kQ6-Cg-FMi"/> <constraint firstAttribute="bottom" secondItem="nLd-BP-JAE" secondAttribute="bottom" id="kQ6-Cg-FMi"/>
<constraint firstItem="54r-18-K1g" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="t02-d3-Zyf"/> <constraint firstItem="RJ4-Os-6tg" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="m1y-Uv-Nfp"/>
<constraint firstItem="uK2-9a-rZj" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="u8r-eN-1g8"/> <constraint firstItem="uK2-9a-rZj" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="u8r-eN-1g8"/>
<constraint firstItem="uK2-9a-rZj" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="y6b-JK-CF5"/> <constraint firstItem="uK2-9a-rZj" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="y6b-JK-CF5"/>
</constraints> </constraints>