小编Dav*_*eB1的帖子

SwiftUI LazyVGrid - 顶部对齐

我有很多卡片需要在 vGrid 中显示。但是,卡片具有动态高度,我想要做的是将列中的卡片与顶部对齐。

这是当前的设置:

let resultGridLayout = [GridItem(.adaptive(minimum: 160), spacing: 10)]

func itemsView() -> some View {
        VStack {
            filterButton()
                .padding(.bottom)
            LazyVGrid(columns: resultGridLayout, spacing: Constants.ItemsGrid.spacing) {
                ForEach(MockData.resultsData, id: \.id) { result in
                    ProductCardView(viewModel: .init(container: viewModel.container, menuItem: result))
                }
            }
            .padding(.horizontal, Constants.ItemsGrid.padding)
        }
    }
Run Code Online (Sandbox Code Playgroud)

目前的布局如下:

在此输入图像描述

因此,每个项目都位于其列空间的中心,而我想要发生的是让它们在每行的顶部对齐。

显然,alignmentvGrid 的修饰符允许我们水平对齐(.center、.leading、.trailing 等),但是我怎样才能阻止它们在中心垂直对齐呢?

alignment swiftui lazyvgrid

12
推荐指数
1
解决办法
4970
查看次数

将复选框重置为 false

我有一个 Google 电子表格,其中 A 列的每一行都有复选框。我编写了一个脚本来在复选框被选中的所有行上执行一个函数,但我想在最后添加一个重置函数,以便在脚本运行后再次取消选中所有选中的框。

我试过使用这样的 for 循环:

var dataRange = sheet.getRange('A3:A');
var values = dataRange.getValues();

for (var i = 0; i < values.length; i++) {
  for (var j = 0; j < values[i].length; j++) {     
    if (values[i][j] == true) {
      values[i].setValue(false);
    }
  }    
} 
Run Code Online (Sandbox Code Playgroud)

但显然这不起作用,因为我收到错误。

有谁知道如何做到这一点?

checkbox google-sheets google-apps-script

7
推荐指数
2
解决办法
2万
查看次数

没有标题的 SwiftUI 选择器

我正在尝试通过 SwiftUI 添加一个简单的选择器功能。本质上我正在寻找的结果是这样的: 在此输入图像描述

单击箭头时,用户应该进入一个新视图,在其中选择所需的单位。

我尝试过这样的事情:

var units = ["ltr", "usg", "impg"]

@State private var selectedUnit = 0

var body: some View {
    Form {
        Section {
            VStack {
                Picker(selection: $selectedUnit, label: Text("")) {
                    ForEach(0 ..< units.count) {
                        Text(self.units[$0])
                        
                    }
                }.frame(width: 42)
            }
            
        }
    }.navigationBarTitle("Select unit")
}
Run Code Online (Sandbox Code Playgroud)

但是,一旦将其封装在表格中,它就需要标题等,并且占用太多空间。我只是想将单位作为我的基本视图。有什么办法可以做到这一点吗?

picker uipickerview swift swiftui

4
推荐指数
1
解决办法
2319
查看次数

将可变高度的 UIHostingController 插入 UIStackView

我有一个问题,我试图将 SwiftUI 视图插入到现有的 UIKit 视图中。SwiftUI 视图可以动态更改高度,但 UIStackView 不会调整到新的大小。我创建了一个(可怕的)测试项目来强调这一点。

按钮:

class TestButton: UIButton {
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupButton()
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setupButton()
        fatalError("init(coder:) has not been implemented")
    }
    
    func setupButton() {
        setTitleColor(.white, for: .normal)
        backgroundColor = .red
        titleLabel?.font = .boldSystemFont(ofSize: 25)
        layer.cornerRadius = 10
    }
}
Run Code Online (Sandbox Code Playgroud)

SwiftUI 视图:

struct TestSwiftUIView: View {
    @State var text: [String] = ["This is a line of text"]
    var body: some View {
        VStack {
            ForEach(text, id: \.self) { …
Run Code Online (Sandbox Code Playgroud)

uikit swift uistackview swiftui uihostingcontroller

4
推荐指数
1
解决办法
1458
查看次数

使用nodemailer发送电子邮件时出错

我正在尝试为我正在创建的应用设置nodemailer。尝试运行代码时收到错误消息。

这是我的设置:

const nodemailer = require("nodemailer");
const xoauth2 = require("xoauth2");

var transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    xoauth2: xoauth2.createXOAuth2Generator({
      user: '****@gmail.com',
      clientId: '*******************************',
      clientSecret: '*****************************',
      refreshToken: '*****************************'
    })
  }
});

var mailOptions = {
  from: 'Dave <*******@gmail.com>',
  to: '*******@gmail.com',
  subject: 'Nodemailer test',
  text: 'Hello world'
}

transporter.sendMail(mailOptions, function(err, res) {
  if (err) {
    console.log(err);
  } else {
    console.log('Email sent');
  }
})
Run Code Online (Sandbox Code Playgroud)

很显然,我仔细检查过我的client IDsecretrefresh token。但是我收到以下错误:

{ Error: Invalid login: 535-5.7.8 Username and Password not …
Run Code Online (Sandbox Code Playgroud)

node.js express nodemailer

2
推荐指数
1
解决办法
4408
查看次数

如何获取范围,然后在 Google Apps 脚本中设置值

我正在尝试在编辑时运行一个函数,该函数将在一系列单元格中查找值“c”,然后将其替换为单词“Closed”。

这是我到目前为止所拥有的:

function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getRange('CA12:CA15').getValues();
  var closed = 'c'
  for(var i=0; i<data.length;i++) {
  if(data[i] == closed) {

    Logger.log('yes')
    Logger.log(data[i]);    
  }
    }
  }
Run Code Online (Sandbox Code Playgroud)

因此,当我在给定范围内获得该值时,这将成功记录“yes”和值“c”。但现在我该如何替换这个值呢?

我尝试使用 getRange() 存储 data[i] 的范围,但它不允许我这样做。如果我能得到这个范围,那么我知道我可以使用 range.setValue('Closed') 但目前有点卡住。我知道我正在做一些非常简单非常错误的事情,但任何帮助都会很棒。

javascript google-sheets google-apps-script

2
推荐指数
1
解决办法
2万
查看次数

Swift - 检查属性文本是否为空

我有一个 UITextField,我将当前值设置为属性文本,如下所示:

public var currentValue: NSAttributedString {
    get {
        return inputField.attributedText ?? NSAttributedString()
    }
    set {
        inputField.attributedText = newValue
    }
}
Run Code Online (Sandbox Code Playgroud)

这以前只是一个字符串,但我现在需要为部分文本添加格式。

但是,我有一种方法需要传递这些字段,该方法以查看该字段是否为空的条件开头。以前我是这样开始的:

if textField.currentValue.isEmpty {
  // Perform logic
}
Run Code Online (Sandbox Code Playgroud)

然而,显然 NSAttributedText 没有 isEmpty 成员。如何对 NSAttributedText 执行相同的检查?

string nsattributedstring nsmutableattributedstring swift

2
推荐指数
1
解决办法
749
查看次数