使用SwiftUI预览无法在Xcode中预览小部件

时间:2020-08-28 01:34:07

标签: xcode macos swiftui widgetkit

我正在尝试使用Widget上下文预览一些View,

struct MyTasksView_Previews: PreviewProvider {
    static var previews: some View {
            MyTasksView(
                myTasks: Fake.myTasks,
                user: Fake.user,
                error: ""
            )
            .previewContext(WidgetPreviewContext(family: .systemMedium))
    }
}

但是,尝试运行预览时出现此错误。而且,我不确定为什么会这样。

RemoteHumanReadableError:未知的预览提供程序“ MyTasksView_Previews” MyApp不包含名为“ MyTasksView_Previews”的预览提供程序。检查您的构建设置,以确保预览提供程序已编译到您的产品中。

我也尝试使用一个简单的Text(text).previewContext(WidgetPreviewContext(family: .systemMedium)),但是它也不起作用。我正在使用Xcode beta 5。

在WWDC 2020的Apple Emoji Rangers演示应用程序中。我们可以看到以下代码以进行预览:

struct CharacterNameView_Previews: PreviewProvider {
    static var previews: some View {
        CharacterNameView(CharacterDetail.panda)
            .previewContext(WidgetPreviewContext(family: .systemSmall))
    }
}

Emoji Rangers example

3 个答案:

答案 0 :(得分:2)

我遇到了类似的问题,我通过将 View 放在 VStack(或其他容器)中解决了这个问题。

这是我的代码:

import requests
from bs4 import BeautifulSoup as BS

s = requests.Session()
#s.headers.update({'User-Agent': 'Mozilla/5.0'})

# --- use tgz to get login page -------

url_tgz = "https://eogdata.mines.edu/wwwdata/viirs_products/dnb_composites/v10//201707/vcmslcfg/SVDNB_npp_20170701-20170731_75N060W_vcmslcfg_v10_c201708061200.tgz"

r = s.get(url_tgz)
#print(r.status_code)
#print(r.history)
print('\n--- url page ---\n')
print(r.url)

# --- find url in form ---

soup = BS(r.text, 'html.parser')
item = soup.find('form') 
url = item['action']

print('\n--- url form ---\n')
print(url)

print('\n--- url page == url in form ---\n')
print( r.url == url )

# --- login ---

payload = {
    'username': 'salvandi69@gmail.com',
    'password': '123asdzxc',
    'credentialId': '',
}

r = s.post(url, data=payload)
#print(r.status_code)
#print(r.history)
#print(r.url)
#print(r.text)

# --- result ---

print('\n--- login ---\n')
soup = BS(r.text, 'html.parser')
item = soup.find('span', {'class': 'kc-feedback-text'})
if item:
    print('Message:', item.text)
else:
    print("Can't see error message")

print('\n--- end ---\n')

答案 1 :(得分:0)

添加Widget extension目标并激活它。欲获得更多信息 https://developer.apple.com/documentation/widgetkit/creating-a-widget-extension

答案 2 :(得分:0)

我在向 UIKit 应用程序添加小部件扩展时遇到了同样的问题。

将类目标成员资格更改为小部件扩展为我解决了这个问题。