在 Xamarin IOS 的 UITableview 中更改滑动以删除按钮高度

Posted

技术标签:

【中文标题】在 Xamarin IOS 的 UITableview 中更改滑动以删除按钮高度【英文标题】:Change swipe to delete button height in UITableview in Xamarin IOS 【发布时间】:2018-03-16 19:55:14 【问题描述】:

我有一个表格视图,其中的单元格周围有一些填充。我实现了滑动删除功能,默认情况下删除按钮占据单元格高度。

我使用下面的 ios 10 代码将其与可见单元格高度对齐,它以一种奇怪的方式搞砸了按钮高度。注意:我使用不同的代码集在 IOS 11 中正常工作,因为 IOS 10 和 IOS 11 之间的处理方式不同。

但下面的 IOS 10 代码搞砸了按钮高度。看起来布局子视图在用户滑动时被多次调用,这导致按钮高度变化很大。关于如何解决这个问题的任何想法。

public override void LayoutSubviews()
        
            base.LayoutSubviews();
                if (Convert.ToInt16(UIDevice.CurrentDevice.SystemVersion.Split('.')[0]) < 11)
                
                    foreach (var view in this.Subviews)
                    
                        if (view.Class.Name.ToString() == "UITableViewCellDeleteConfirmationView")
                        
                            CGRect newFrame = view.Frame;
                            newFrame.Y = newFrame.Y + 6;
                            newFrame.Height = newFrame.Height - 12;
                            view.Frame = newFrame;
                        
                    
                
        

【问题讨论】:

【参考方案1】:

请参阅this post。

iOS11之前的视图层次如下所示

UITableView -> UITableViewCell -> UITableViewCellDeleteConfirmationView -> _UITableViewCellActionButton

我看到你得到的是 UITableViewCellDeleteConfirmationView 而不是 Button 。

修改你的代码:

foreach (UIView subview in this.Subviews)

    if (subview.Class.Name.ToString() == "UITableViewCellDeleteConfirmationView")
    
        foreach (var view in subview.Subviews)
        
            if (view.Class.Name.ToString() == "_UITableViewCellActionButton")
            
                CGRect newFrame = view.Frame;
                newFrame.Y = newFrame.Y + 6;
                newFrame.Height = newFrame.Height - 12;
                view.Frame = newFrame;
            
        
    

【讨论】:

以上是关于在 Xamarin IOS 的 UITableview 中更改滑动以删除按钮高度的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.IOS 和 Signalr 推送通知

Xamarin.iOS 应用在 iOS 14.0 中询问本地网络权限

Xamarin IOS - Xamarin IOS 中的轮播视图(图像)

Xamarin.iOS 和 RFComm

Xamarin iOS部署无声无息

在Xamarin.IOS C#中强制Draw()