cryptofoundry

cryptofoundry へのお問い合わせ

構築または自動化したい内容をお聞かせください。

Dev Guidelines & Docs

チャット内でのスクロール位置と「新着メッセージ」セパレータ

dev-adamant-im鋳造所から ↗

このドキュメントは、ユーザーがADAMANTチャットにアクセスまたは操作した際のスクロール位置の挙動について説明します。

2つのスクロール状態

スクロール位置は各チャットごとに個別に保存されます。チャットは、位置が保存されていない状態、またはユーザーが手動でスクロールして位置を保存した状態のいずれかです。

「最下部にスクロール」ボタンの表示

最下部にスクロールボタンは、最後の1行メッセージが画面のおよそ4分の3以上隠れている場合に表示されます。

Discussion screenshot 1

ユーザーがこのボタンをタップしたときの動作は、新着メッセージの有無によって異なります。新着メッセージがある場合(ボタン付近にカウンターが表示されていることで示される)ビューは新着メッセージセパレータまでスクロールします。新着メッセージがない場合、またはユーザーがすでにセパレータより下にいる場合は、ビューは最下部までスクロールします。

「新着メッセージ」セパレータまでスクロールする場合、セパレータの上には約3行分のメッセージが表示されるように配置してください。このとき、音声、振動、メッセージのハイライトは発生しません。

セパレータは、チャットの最初のメッセージより前に表示されてはいけません。たとえば、新しい連絡先から10件のメッセージを受信した場合、チャットは最初のメッセージまでスクロールしますが、セパレータは表示されません。

スクロール位置の保存

スクロール位置は、ユーザーがチャットの最下部にいない場合にのみ保存します。最下部から数ピクセルの範囲内は「最下部にいる」と見なされ、位置は保存しません。目安として、最下部にスクロールボタンが表示されている場合は、位置を保存すべきです。

Discussion screenshot 2

Discussion screenshot 3

Discussion screenshot 4

チャットの長さが画面の高さより短い場合(例:短いメッセージが少数だけ)は、常に最下部にいると見なされます。この場合、ボタンは非表示になり、スクロール位置も保存されません。

スクロール位置の復元

以下の3つのイベントを処理する必要があります。1つ目は、ユーザーがチャット内にいるときに新着メッセージが到着する場合です。2つ目は、ユーザーがチャット一覧やトランザクション一覧 → トランザクション詳細からのチャットへ移動など、他の画面から新着メッセージがあるチャットを開く場合です。3つ目は、アプリ内通知またはプッシュ通知から新着メッセージのチャットを開く場合です。

ユーザーがチャット内にいて新着メッセージが到着した場合、挙動はスクロール位置が保存されているかどうかによります。位置が保存されていない場合、着信または送信メッセージごとにチャットは常に最下部までスクロールし、セパレータは表示されません。位置が保存されている場合、着信メッセージではスクロールは発生せず、代わりにボタンのカウンターが更新され、セパレータが表示されます。これはユーザーがボタンをタップするか手動でスクロールすることで確認できます。一方、送信メッセージの場合は、保存された位置に関わらず常に最下部までスクロールします。

ユーザーがチャット一覧または他の画面から新着メッセージがあるチャットを開き、位置が保存されていない場合、チャットは「新着メッセージ」セパレータに移動します。位置が保存されている場合は、チャットはスクロールしません。ボタンのカウンターが更新され、セパレータが表示され、ユーザーが最下部にスクロールボタンをタップまたは手動でスクロールしたときに表示されます。

ユーザーが新着メッセージの通知からチャットに入った場合、スクロール位置が保存されていてもいなくても、「新着メッセージ」セパレータに移動します。複数のメッセージを受信していた場合でも、ビューは最新のメッセージまでジャンプしてはいけません。

これらのルールにより、ADAMANT内のすべてのチャット入口において、スクロール、セパレータ、位置の復元が一貫性と予測可能性を保って動作します。