1

我正在使用 Xamarin.Forms 5.0 版为 iOS 15 开发应用程序。我正在努力平滑大标题滚动过渡。我的问题概述在这个问题上:iOS 11 large navigation bar title unexpected velocity

根据上面的链接,这在 Swift 上似乎是一个相当简单的解决方案,但我正在努力使用 Xamarin.iOS 来做到这一点。

使用自定义渲染器,我有以下设置:

ExtendedLayoutIncludesOpaqueBars = True;
EdgesForExtendedLayout = UIRectEdge.Top;
AutomaticallyAdjustsScrollViewInsets = true;
NavigationController.NavigationBar.PrefersLargeTitles = true;
NavigationItem.LargeTitleDisplayMode = UINavigationItemLargeTitleDisplayMode.Automatic;
NavigationController.NavigationBar.Translucent = true;

我尝试通过将 ScrollView 的约束设置为 View 的约束来修改它们。此页面的 View.Superview 为空,并且不允许我更改这些约束。

我尝试了各种不同的设置组合。

我尝试将 ScrollView 更改为 TableView。

我知道我可以制作一个自定义导航栏来模拟这种转换,但我正在尝试使用原生 iOS 设置和 UI 设计。

这个问题的答案之一表明获得平滑滚动转换的唯一方法是使用 UITableViewController 而不是内部带有 UITableView 的 UIViewController。这可能在 Xamarin 上吗?在 Xaml 中设计 UI 时,我还没有找到使用 UITableViewController 的方法。即使我可以更改为 UITableViewController,我能否在渲染器中正确设置约束?

还有什么我应该尝试的吗?

感谢您的任何回复。

4

1 回答 1

0

尝试找到 ScrollView 并更改它的约束。

[assembly: ExportRenderer(typeof(ContentPage), typeof(MyBarRenderer))]
namespace FormsApp.iOS
{
    internal class MyBarRenderer : PageRenderer
    {
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            ExtendedLayoutIncludesOpaqueBars = true;

            foreach (UIView view in View.Subviews)
            {
                if (view is UIScrollView sc)
                {
                    NSLayoutConstraint.ActivateConstraints(new NSLayoutConstraint[] {
                        sc.TopAnchor.ConstraintEqualTo(View.TopAnchor),
                        sc.LeftAnchor.ConstraintEqualTo(View.LeftAnchor),
                        sc.BottomAnchor.ConstraintEqualTo(View.BottomAnchor),
                        sc.RightAnchor.ConstraintEqualTo(View.RightAnchor),
                    });
                }
            }
        }
    }
}

参考

iOS 11 大标题导航栏捕捉而不是平滑过渡

于 2021-12-21T06:45:45.307 回答