mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-29 15:52:40 +00:00
Chat Screen: Prepare scrolling on preview
This commit is contained in:
parent
cbc3ec6aa0
commit
1055c6cffe
3 changed files with 87 additions and 19 deletions
|
@ -29,6 +29,7 @@
|
|||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *expandedHeaderContainerHeightConstraint;
|
||||
|
||||
// The preview header
|
||||
@property (weak, nonatomic) IBOutlet UIScrollView *previewScrollView;
|
||||
@property (weak, nonatomic) IBOutlet UIView *previewHeaderContainer;
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *previewHeaderContainerHeightConstraint;
|
||||
|
||||
|
|
|
@ -223,9 +223,11 @@
|
|||
// Note: this operation will force the layout of subviews. That is why cell view classes must be registered before.
|
||||
[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];
|
||||
[self roomInputToolbarView:self.inputToolbarView heightDidChanged:((RoomInputToolbarView*)self.inputToolbarView).mainToolbarMinHeightConstraint.constant completion:nil];
|
||||
[self roomInputToolbarView:self.inputToolbarView heightDidChanged:height completion:nil];
|
||||
[UIView setAnimationsEnabled:YES];
|
||||
|
||||
// set extra area
|
||||
|
@ -364,7 +366,7 @@
|
|||
[self showExpandedHeader:NO];
|
||||
|
||||
// Hide preview header (if any) during device rotation
|
||||
BOOL isPreview = !self.previewHeaderContainer.isHidden;
|
||||
BOOL isPreview = !self.previewScrollView.isHidden;
|
||||
if (isPreview)
|
||||
{
|
||||
[self showPreviewHeader:NO];
|
||||
|
@ -432,9 +434,15 @@
|
|||
{
|
||||
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.
|
||||
self.inputToolbarView.hidden = YES;
|
||||
self.activitiesView.hidden = YES;
|
||||
// Remove input tool bar and activity view if any
|
||||
if (self.inputToolbarView)
|
||||
{
|
||||
[super setRoomInputToolbarViewClass:nil];
|
||||
}
|
||||
if (self.activitiesView)
|
||||
{
|
||||
[super setRoomActivitiesViewClass:nil];
|
||||
}
|
||||
|
||||
if (previewHeader)
|
||||
{
|
||||
|
@ -451,9 +459,52 @@
|
|||
self.titleView.editable = NO;
|
||||
|
||||
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
|
||||
{
|
||||
// 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,
|
||||
// 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)
|
||||
{
|
||||
|
@ -784,7 +835,7 @@
|
|||
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.
|
||||
UINavigationController *mainNavigationController = self.navigationController;
|
||||
|
@ -833,7 +884,6 @@
|
|||
|
||||
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseIn
|
||||
animations:^{
|
||||
self.bubblesTableViewTopConstraint.constant = (isVisible ? self.previewHeaderContainerHeightConstraint.constant - self.bubblesTableView.contentInset.top : 0);
|
||||
|
||||
if (roomAvatarView)
|
||||
{
|
||||
|
@ -1568,9 +1618,12 @@
|
|||
|
||||
// Enable back the text input
|
||||
[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:((RoomInputToolbarView*)self.inputToolbarView).mainToolbarMinHeightConstraint.constant completion:nil];
|
||||
[self roomInputToolbarView:self.inputToolbarView heightDidChanged:height completion:nil];
|
||||
[UIView setAnimationsEnabled:YES];
|
||||
|
||||
// And the extra area
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
<outlet property="expandedHeaderContainerHeightConstraint" destination="w9z-HS-7wJ" id="6uK-Bn-TcU"/>
|
||||
<outlet property="previewHeaderContainer" destination="54r-18-K1g" id="Klt-RV-V1E"/>
|
||||
<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="roomActivitiesContainerHeightConstraint" destination="E8v-l2-8eV" id="ebD-oV-ttx"/>
|
||||
<outlet property="roomInputToolbarContainer" destination="nLd-BP-JAE" id="1dp-P1-0js"/>
|
||||
|
@ -38,13 +39,25 @@
|
|||
<constraint firstAttribute="height" constant="240" id="w9z-HS-7wJ"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view hidden="YES" 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"/>
|
||||
<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="559"/>
|
||||
<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>
|
||||
<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>
|
||||
</view>
|
||||
</scrollView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XX4-n6-hCm" userLabel="Activities Container">
|
||||
<rect key="frame" x="0.0" y="539" width="600" height="20"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
|
@ -64,18 +77,19 @@
|
|||
<constraints>
|
||||
<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="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="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 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="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="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="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 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="top" secondItem="iN0-l3-epB" secondAttribute="top" id="y6b-JK-CF5"/>
|
||||
</constraints>
|
||||
|
|
Loading…
Reference in a new issue